我们通过某种渠道,例如 api 接口获取到对象数组,需要在前端将数组按某字段从小到大或从大到小来排序。例如:
let productList = [
{
name: "产品A",
price: 200
},
{
name: "产品B",
price: 60
},
{
name: "产品C",
price: 180
},
];
js 数组里有个自带的排序方法:sort()——对数组的元素进行从小到大来排序(会改变原来的数组)。
如果在使用 sort() 方法时不带参,默认排序顺序是在将元素转换为字符串按照Unicode 编码,从小到大进行排序。
如果在 sort() 方法中带参,我们就可以自定义排序规则。具体做法如下:
我们可以在 sort() 添加一个回调函数,来指定排序规则。
回调函数中需要定义两个形参,浏览器将会分别使用数组中的元素作为实参去调用回调函数。
如果
compareFunction(a, b)
小于 0 ,那么 a 会被排列到 b 之前;
如果compareFunction(a, b)
等于 0 , a 和 b 的相对位置不变;
如果compareFunction(a, b)
大于 0 , b 会被排列到 a 之前。
例如:
let arr = [5, 1, 3, 2, 4];
let result = arr.sort(function (a, b) {
return a - b; // 升序排列
// return b - a; // 降序排列
});
上面代码可以写成 ES6 的形式,也就是将 function 改为箭头函数,其写法如下 :
let result = arr.sort((a, b) => {
return a - b; // 升序排列
});
或者:
let result = arr.sort((a, b) => a - b);
所以,我们把文章开头的 productList,按照 price 升序排序,一行代码即可:
priceList.sort((a, b) => parseInt(a.price) - parseInt(b.price));