JavaScript对象数组按age字段分组并按年龄升序排列的实现方案
按年龄分组并排序对象数组
要实现将对象数组按age字段分组,且分组结果按年龄从小到大排序,可分两步完成:先按年龄分组,再对分组结果排序。
修正原始数据语法错误
你提供的示例数据中,Matt的对象里name属性后缺少逗号,先修正为合法的JavaScript代码:
var data = [ { name: "Mike", age: 10 }, { name: "Matt", age: 10 }, { name: "Nancy", age: 15 }, { name: "Adam", age: 22 }, { name: "Jenny", age: 22 } ];
方法一:分步实现
先遍历数组完成分组,再对分组后的结果排序:
// 1. 按age字段分组 const groupedByAge = {}; data.forEach(item => { const age = item.age; // 如果当前年龄还没有对应的分组数组,就创建一个空数组 if (!groupedByAge[age]) { groupedByAge[age] = []; } groupedByAge[age].push(item); }); // 2. 提取分组数组并按年龄从小到大排序 const sortedResult = Object.keys(groupedByAge) // 将年龄字符串转为数字后排序 .sort((a, b) => Number(a) - Number(b)) // 根据排序后的年龄提取对应分组 .map(age => groupedByAge[age]); console.log(sortedResult);
方法二:简洁写法(使用reduce)
用Array.reduce一步完成分组,再对分组结果排序:
const sortedResult = Object.values( data.reduce((acc, item) => { const age = item.age; acc[age] = acc[age] || []; acc[age].push(item); return acc; }, {}) ) // 按分组内的年龄数值排序 .sort((groupA, groupB) => groupA[0].age - groupB[0].age); console.log(sortedResult);
两种方法最终都会输出你期望的结果:
[ [{name:"Mike",age: 10},{name: "Matt",age: 10}], [{name: "Nancy",age: 15}], [{name: "Adam", age: 22},{name: "Jenny",age: 22}] ]
内容的提问来源于stack exchange,提问作者Iman Kamali
相关产品推荐
相关产品推荐

