如何在JavaScript中按age数字属性排序对象数组?
按age属性排序JavaScript对象数组的实现方法
当然可以实现,以下是两种符合需求的实现方式:
一、生成排序后的对象数组
先复制原数组避免修改原始数据,再通过sort()方法传入自定义比较函数,基于age属性做升序排序:
var object = [ { name: 'Mar', age: 32 ,height:40}, { name: 'Carla', age: 10 ,height:15}, { name: 'Hazel', age: 5 ,height:80} ]; // 复制原数组后排序,不改动原数据 var newobject = [...object].sort((a, b) => a.age - b.age);
执行后newobject的结果就是你预期的排序后对象数组:
[ { name: 'Hazel', age: 5 ,height:80}, { name: 'Carla', age: 10 ,height:15}, { name: 'Mar', age: 32 ,height:40} ];
二、生成嵌套数组形式的结果
如果需要转换成数组嵌套的格式,可在排序后用map()方法转换结构:
var object = [ { name: 'Mar', age: 32 ,height:40}, { name: 'Carla', age: 10 ,height:15}, { name: 'Hazel', age: 5 ,height:80} ]; var new_sorted_array = [...object] .sort((a, b) => a.age - b.age) .map(item => [item.name, item.age, item.height]);
执行后new_sorted_array的结果为:
[ ['Hazel', 5 ,80] , ['Carla', 10 ,15], ['Mar', 32 ,40] ];
关键说明
sort()方法默认按字符串规则排序,所以必须传入(a, b) => a.age - b.age这样的比较函数,才能实现数值类型的升序排序;如果要降序,改成b.age - a.age即可。- 使用
[...object]或者object.slice()复制原数组,是为了避免sort()方法直接修改原始数组的数据。
内容的提问来源于stack exchange,提问作者Cindy Adriana Bohrquez Santana
相关产品推荐
相关产品推荐

