Javascript 通过拆分属性为数组的对象来创建对象
我有一个属性为数组(长度可变)的对象数组,我想用通过组合数组属性中的元素创建的新对象(在同一数组中)替换这些对象。 我在一个js类的函数中工作,这就是为什么你会看到“这个” 人们建议我使用.reduce()和.map(),但我不知道如何使用它们。 目标如下:Javascript 通过拆分属性为数组的对象来创建对象,javascript,arrays,Javascript,Arrays,我有一个属性为数组(长度可变)的对象数组,我想用通过组合数组属性中的元素创建的新对象(在同一数组中)替换这些对象。 我在一个js类的函数中工作,这就是为什么你会看到“这个” 人们建议我使用.reduce()和.map(),但我不知道如何使用它们。 目标如下: this.apple="apple" this.Array=[ { names:[something1, something2...] fruit:this.apple fe
this.apple="apple"
this.Array=[
{ names:[something1, something2...]
fruit:this.apple
features:[feature1,feature2,...]
}
]
预期产出将是:
// (expected output):
this.Array=[
{ names:something1,
fruit:this.apple
features:feature1
},
{ names:something1,
fruit:this.apple
features:feature2
},
{ names:something2,
fruit:this.apple
features:feature1
},
{ names:something2,
fruit:this.apple
features:feature2
},
...
]
.map()将是处理此问题的最佳方法,但是我很快写下了这篇文章,因为我时间有限:
let apple=“apple”;
让数组=[
{
姓名:[“某物1”、“某物2”],
水果:这个,苹果,
功能:[“功能1”、“功能2”]
}
];
让某物=[];
让特征=[];
数组[0]。名称。forEach(项=>{
推(物品);
});
数组[0]。功能。forEach(项=>{
功能。推送(项目);
});
设newtest=[];
for(让index=0;index
上面的代码将执行您需要的操作,而不使用.map();
简而言之,它的作用是:
我们从初始对象拆分了2个数组,然后通过循环创建一个新数组,然后向同一对象添加相同的索引。不确定这是否正是你想要的
结果如下:
[
{名称:'something1',水果:'apple',特征:'feature1'},
{名称:'something2',水果:'apple',特征:'feature2'}
]
使用flatMap
可以将数组中的元素解组
const fruit='apple'
常量数组=[
{名称:['something1','something2'],
水果:水果,
功能:['feature1','feature2']
}
]
array.flatMap(({name,fruit,features})=>{
name.flatMap(name=>{
features.flatMap(feature=>{
log({name,fruit,feature}));
})
})
})
一种可能的方法是递归遍历所有键,并为每个键生成一个或多个对象(取决于输入值或数组):
功能组合(obj、键、idx、arr、proto){
arr=arr | |[];
proto=proto |{};
keys=keys | | Object.keys(obj);
idx=idx | | 0;
如果(idx>=密钥长度){
arr.push(Object.assign({},proto));
}
否则{
让key=keys[idx++];
设vals=obj[key];
if(数组isArray(VAL))
对于(让v表示VAL){
proto[key]=v;
联合收割机(obj、钥匙、idx、arr、proto);
}否则{
proto[key]=vals;
联合收割机(obj、钥匙、idx、arr、proto);
}
}
返回arr;
}
让组织={
姓名:[“某物1”、“某物2”],
水果:“苹果”,
功能:[“功能1”、“功能2”],
};
log(…combine(org))代码>没有弄清楚你想要什么,请解释清楚。我有一个对象(this.Array),它的属性(名称、特性)是数组。我想把这个对象分割成多个对象,这些对象的属性只有前一个数组属性的一个元素。在我编写代码时,我希望该对象变成四个不同的对象,它们是由前一个对象的属性中的元素组合而成的。您的代码正是我想要的,但事实是我在一个js类中工作,所以我不能声明const。你能像在js类中一样修改你的代码片段吗?@Drun,用你在文章中提到的this
替换const
关键字。。将const数组
更改为this.array
。。在this.Array=[…]
之后使用flatMap解决方案..我尝试过,但它给我错误“names.flatMap不是函数”,因为它不知道什么是“names”is@Drun,是否确定names
是数组??你能像我为你的解决方案创建的那样在codepen中创建任何示例吗。。如果可能,请使用您的结果修改它。@Drun,如果array.flatMap
起作用,那么它也应该在names.flatMap
中起作用,因为flatMap已经识别了array.flatMap
。。似乎名称不正确。。