javascript - 如何从另一个数组中的对象属性创建数组

标签 javascript arrays

我有一个对象数组,我想根据数组中对象的属性将其分解为另一组数组。

例如,我有一些这样的对象:

function Object1(property1, property2, property3){
this.property1 = property1;
this.property2 = property2;
this.property3 = property3;
}

然后,我有一个包含其中多个对象的数组,但其中一些对象共享相同的 property1 值,例如:

const obj1 = new Object1(id_1, some_value_1, some_value_2);
const obj2 = new Object1(id_2, some_value_2, some_value_2);
const obj3 = new Object1(id_1, some_value_3, some_value_3);
const obj4 = new Object1(id_2, some_value_4, some_value_4);

var objectArray = [obj1, obj2, obj3, obj4];

现在给定这个数组,我想基于 Object1.property1 创建新数组,以便最终得到以下数组:

array1 = [obj1, obj3];
array2 = [obj2, obj4];

这无疑不是一项艰巨的任务,但我想不出自动取款机。感谢您的投入。

有一两个警告:我不会总是知道 objectArray 有多大,并且我不会知道该数组中有多少对象共享一个属性,这意味着需要 x 个新数组。

最佳答案

您可以使用 reduce 按特定属性对对象进行分组:

function Object1(property1, property2, property3) {
  this.property1 = property1;
  this.property2 = property2;
  this.property3 = property3;
}

const obj1 = new Object1('id_1', 'some_value_1', 'some_value_2');
const obj2 = new Object1('id_2', 'some_value_2', 'some_value_2');
const obj3 = new Object1('id_1', 'some_value_3', 'some_value_3');
const obj4 = new Object1('id_2', 'some_value_4', 'some_value_4');

const objectArray = [obj1, obj2, obj3, obj4];

const outputObj = objectArray.reduce((accum, obj) => {
  const id = obj.property1;
  if (!accum[id]) accum[id] = [];
  accum[id].push(obj);
  return accum;
}, []);

const [array1, array2] = Object.values(outputObj);
console.log(array1);
console.log(array2);

您还应该注意不要混合使用 constvar - 如果您要使用 ES6,请始终使用 const (并且当需要重新分配时,很少使用 let)。

关于javascript - 如何从另一个数组中的对象属性创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50124792/

相关文章:

javascript - 为什么我的 JavaScript 代码会收到 "No ' Access-Control-Allow-Origin' header is present on the requested resource"错误,而 Postman 却没有?

javascript - 替换或删除查询字符串 javascript

c++ - 更改数组中声明的变量

Javascript如何找到数组中最大的数字并记录位置

java - 如何在JAVA中创建带有无符号整数的数据包

php - 如何通过在 PHP 中使用键增加数组计数来附加数组元素?

javascript - React Axios 调用不显示任何数据,即使 console.log 输出显示数据

javascript - 使用带有可选参数的回调

javascript - 循环引用实例化

Java 泛型数组 : Why does this compile and what does this mean?