如何将关联数组按年龄升序排序?附示例代码与期望输出
嘿,我来帮你搞定这两个排序问题,一步步说清楚哈!
需求1:关联数组的升序排序
首先得明确:在JavaScript里,我们常说的“关联数组”其实就是键值对形式的普通对象。不过普通对象本身在早期JS里是无序的,但ES6+之后会保留键的插入顺序。如果要对它进行升序排序(不管是按键还是按值),可以这么做:
按值升序排序的步骤:
- 用
Object.entries()把对象转换成[键, 值]格式的数组 - 调用
sort()方法,通过比较值的大小来排序 - 可选:用
Object.fromEntries()把排序后的数组转回对象(如果需要保留有序结构,更推荐用Map,因为它是真正的有序键值对集合)
示例代码:
// 示例关联数组 const assocArray = { apple: 5, banana: 2, cherry: 8 }; // 转成键值对数组并按值升序排序 const sortedEntries = Object.entries(assocArray).sort((a, b) => a[1] - b[1]); // 转回有序对象(ES6+支持) const sortedAssocArray = Object.fromEntries(sortedEntries); console.log(sortedAssocArray); // 输出:{ banana: 2, apple: 5, cherry: 8 }
如果是按键升序排序,只需要把排序函数改成比较键的字符串顺序就行:
const sortedByKey = Object.entries(assocArray).sort((a, b) => a[0].localeCompare(b[0]));
需求2:按年龄升序排序对象数组
针对你给出的employ数组,直接用数组的sort()方法,比较每个对象的age属性就可以啦!注意sort()默认是按字符串排序,所以我们要手动写比较函数来处理数字排序。
实现代码:
var employ = [ {"id":1, "name":"Andrew", "age":30, "gender":"m", "category":"G"}, {"id":2, "name":"Brandon", "age":25, "gender":"m", "category":"G"}, {"id":3, "name":"Christine", "age":20, "gender":"m", "category":"G"}, {"id":4, "name":"Elena", "age":29, "gender":"W", "category":"M"} ]; // 按年龄升序排序,直接修改原数组 employ.sort((a, b) => a.age - b.age); console.log(employ); // 输出结果就是你期望的: // [ // {"id":3, "name":"Christine", "age":20, "gender":"m", "category":"G"}, // {"id":2, "name":"Brandon", "age":25, "gender":"m", "category":"G"}, // {"id":4, "name":"Elena", "age":29, "gender":"W", "category":"M"}, // {"id":1, "name":"Andrew", "age":30, "gender":"m", "category":"G"} // ]
小提示:
如果不想修改原数组,可以先复制一份再排序:
// 用扩展运算符复制数组,原数组不受影响 const sortedEmploy = [...employ].sort((a, b) => a.age - b.age);
内容的提问来源于stack exchange,提问作者Nalin Kumar
相关产品推荐
相关产品推荐

