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调用肯定让我走上了正确的轨道,我想,谢谢。