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

如何根据对象属性从对象数组中创建新数组

按对象属性分组数组的几种实用方法

嘿,这问题我太懂了!要把你的Object1实例数组按property1(比如你的id_1这类标识)拆分成多组,JavaScript里有几个非常顺手的方案,我结合你的例子给你演示下:

方法一:使用Array.reduce()(最常用)

reduce()是ES6+里处理这类分组需求的经典工具,它能帮我们遍历数组的同时,构建一个以property1值为键、对应分组数组为值的对象,最后提取对象的取值就能得到分组后的数组列表啦。

代码示例:

// 先定义你的构造函数
function Object1(property1, property2, property3) {
  this.property1 = property1;
  this.property2 = property2;
  this.property3 = property3;
}

// 示例数组(模拟你创建的多个Object1实例)
const objArray = [
  new Object1('id_1', 'some_value_1', 'some_value_2'),
  new Object1('id_2', 'some_value_3', 'some_value_4'),
  new Object1('id_1', 'some_value_5', 'some_value_6'),
  new Object1('id_3', 'some_value_7', 'some_value_8'),
  new Object1('id_2', 'some_value_9', 'some_value_10')
];

// 按property1分组
const groupedObj = objArray.reduce((acc, currentItem) => {
  // 获取当前对象的分组标识键
  const groupKey = currentItem.property1;
  // 如果缓存对象里还没有这个键,先初始化一个空数组
  if (!acc[groupKey]) {
    acc[groupKey] = [];
  }
  // 把当前对象push到对应的分组数组里
  acc[groupKey].push(currentItem);
  return acc;
}, {});

// 如果需要得到纯分组数组列表(而非键值对对象)
const groupedArrays = Object.values(groupedObj);

console.log(groupedArrays);
// 输出结果:
// [
//   [Object1 {property1: 'id_1', ...}, Object1 {property1: 'id_1', ...}],
//   [Object1 {property1: 'id_2', ...}, Object1 {property1: 'id_2', ...}],
//   [Object1 {property1: 'id_3', ...}]
// ]

方法二:使用Map(保留键的插入顺序)

如果你需要严格保留分组键的插入顺序(比如先出现的id_1组始终排在最前面),用Map会更合适——普通对象的键顺序在早期JS里是不确定的,而Map会完全按照键的插入顺序保存。

代码示例:

const groupedMap = objArray.reduce((map, currentItem) => {
  const groupKey = currentItem.property1;
  // 如果Map里没有这个键,先设置一个空数组
  if (!map.has(groupKey)) {
    map.set(groupKey, []);
  }
  map.get(groupKey).push(currentItem);
  return map;
}, new Map());

// 转成纯分组数组列表
const groupedArraysFromMap = Array.from(groupedMap.values());

// 也可以直接通过键快速获取对应分组
console.log(groupedMap.get('id_1')); // 输出所有property1为id_1的对象

小提示

  • 如果你的property1是复杂类型(比如对象),优先用Map——因为普通对象的键只能是字符串或Symbol,而Map支持任意类型作为键。
  • 如果你用的是ES2023及以上版本,还可以用原生的Object.groupBy(),代码更简洁:
// ES2023+ 原生分组方法
const groupedByNative = Object.groupBy(objArray, item => item.property1);
const groupedArraysNative = Object.values(groupedByNative);

内容的提问来源于stack exchange,提问作者SQLiteNoob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:10:40