JavaScript中如何对包含字典对象的数组按指定属性排序
实现对象数组按指定属性数值排序的方案
JS 内置的Array.sort()方法支持传入自定义比较函数,你只需要在比较逻辑中读取对象的num属性做数值比较即可,完整实现代码如下:
const originArr = [ {num: 0, otherdatas: 'blah'}, {num: 5, otherdatas: 'blah'}, {num: 3, otherdatas: 'blah'}, {num: 8, otherdatas: 'blah'}, {num: 9, otherdatas: 'blah'}, {num: 4, otherdatas: 'blah'} ]; // 按num属性升序排序 originArr.sort((itemA, itemB) => itemA.num - itemB.num);
原理解释
- 传入
sort的比较函数接收两个参数,对应参与比较的两个数组元素 - 函数返回值小于0时,第一个参数会排在第二个参数前面;返回值大于0时,第二个参数排在前面;等于0时二者相对顺序不变
- 直接对两个元素的
num属性做减法,就能得到符合要求的返回值,实现按数值从小到大排序。如果需要从大到小降序排列,把返回值改成itemB.num - itemA.num即可。
注意事项
Array.sort()是原地排序,执行后会直接修改原数组。如果需要保留原始数组不被改动,可以先拷贝一份再执行排序:
// 扩展运算符拷贝数组,不会修改原originArr const sortedArr = [...originArr].sort((a, b) => a.num - b.num);
如果你的num属性可能存在字符串格式的数字(比如"3"),可以在比较时先转成数值类型避免异常:
originArr.sort((a, b) => Number(a.num) - Number(b.num));
内容的提问来源于stack exchange,提问作者BangulBangul
相关产品推荐
相关产品推荐

