不想看需求的可以直接看代码部分
需求:小程序项目中,需要对商品价格(区间价格)和商品划线价、商品促销活动价格进行处理,判断,情况比较复杂,上个简单的图
image.png标注
1.中划线划掉的价格为当前颜色的吊牌价(如果当前颜色不同尺码的吊牌价全都相同,则该价格是固定值,如果当前颜色下不同尺码的吊牌价不同,则取所有尺码吊牌价的最高价)
2.橙色价格是当前颜色的价格(如果当前颜色不同尺码价格全都相同,则该价格是固定值,如果当前颜色下不同尺码价格不同,则现价是一个区间价格,取所有尺码中最低价和最高价为区间范围)
3.促销活动价(可以先忽略,因为加上这个更复杂,难以理解,就取了没有活动价格的商品来演示)
因为后端返回的数据结构跟需求结构有出入,所有我把用到的部分数据处理保存了一下,红色区域标识当前颜色所有尺码商品的现价,未处理前是按后端返回的顺序push的,之前处理的时候直接用了sort方法,如图:
image.png
但是当时测试没测试出来会有反着的情况,如图
image.png
说明直接用sort方法排序并没有生效,查看的时候发现数组中的价格都是string类型
刚开始想先循环数组通过Number()或者parseInt()把数组中每一项转换成number类型,在调用sort方法,或者在存值的时候直接Number()或者parseInt()转一下,这两种方法应该也是可以的,但是我选择了一种好像最笨的方法,写了个方法,调用方法排序,看代码吧
代码部分
方法:
priceSort (arr) {
let newArr = arr.map(v => Number(v));
const sortFun = (a, b) => a - b; // a-b 从小到大 b-a 从大到小
return newArr.sort(sortFun)
}
调用:
priceArr.length >= 2 ? priceArr = that.priceSort(priceArr) : ' ';
再不然其实直接来一个冒泡排序或者快速排序也是可以的!哈哈哈
网友评论