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

Javascript 如何从另一个数组中的对象属性创建数组,javascript,arrays,Javascript,Arrays,我有一个对象数组,我想根据数组中对象的属性将其分解为另一组数组 例如,我有一些对象,例如: function Object1(property1, property2, property3){ this.property1 = property1; this.property2 = property2; this.property3 = property3; } 然后,我有一个数组,其中有几个对象,但是有些对象的属性1值相同,例如: const obj1 = new Object1(id_1,

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

例如,我有一些对象,例如:

function Object1(property1, property2, property3){
this.property1 = property1;
this.property2 = property2;
this.property3 = property3;
}
然后,我有一个数组,其中有几个对象,但是有些对象的
属性1
值相同,例如:

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个新数组。

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

函数对象1(属性1、属性2、属性3){
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');
常量objectArray=[obj1、obj2、obj3、obj4];
const outputObj=objectArray.reduce((accum,obj)=>{
常数id=对象属性1;
如果(!accum[id])accum[id]=[];
累计[id]。推送(obj);
返回累计;
}, []);
常量[array1,array2]=对象值(outputObj);
控制台日志(array1);
控制台日志(array2)
您可以使用
.filter()
根据属性值选择数组中的对象:

函数对象1(属性1、属性2、属性3){
this.property1=property1;
this.property2=property2;
this.property3=property3;
}
const obj1=新对象1(1,'a','a');
const obj2=新对象1(2,'b','b');
const obj3=新对象1(1,'c','c');
const obj4=新对象1(2,'d','d');
常量objectArray=[obj1、obj2、obj3、obj4];
常量数组1=objectArray.filter(e=>e.property1==1)
常量array2=objectArray.filter(e=>e.property1==2)
控制台日志(array1)

log(array2)
为了简单起见,我将内联创建数组和对象

这将分两次完成。首先,将prop2和prop3按prop1分组。然后,筛选出每个组的唯一元素

var things = [
  {prop1: 1, prop2: 'a', prop3: 'b'},
  {prop1: 2, prop2: 'b', prop3: 'b'},
  {prop1: 1, prop2: 'c', prop3: 'c'},
  {prop1: 2, prop2: 'd', prop3: 'd'}
];

var grouped = things.reduce(function (groups, thing) {
  groups[thing.prop1] = groups[thing.prop1] || [];
  groups[thing.prop1].push(thing.prop2);
  groups[thing.prop1].push(thing.prop3);
  return groups;
}, {});

/*
We are now grouped by prop1.
{
1: ["a", "b", "c", "c"],
2: ["b", "b", "d", "d"]
}
*/

var groupedAndUniq = Object.keys(grouped).reduce(function (groups, key) {
  groups[key] = [...new Set(grouped[key])];
  return groups;
}, {});

console.log(groupedAndUniq);

/*
We are now grouped and unique.
{
1: ["a", "b", "c"],
2: ["b", "d"]
}
*/

“基于Object1.property1创建新数组”是什么意思?以及如何创建新数组?标准是什么?保存if条件的建议:
acum[id]=[…(acum[obj]| |[]),obj]
reduce调用肯定让我走上了正确的轨道,我想,谢谢。谢谢你的建议。我不想把属性和对象分开,我需要的是对象。reduce调用肯定让我走上了正确的轨道,我想,谢谢。