js将对象数组按某字段从小到大排序

我们通过某种渠道,例如 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));

已发布

分类

来自

标签: