You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:12:13