我想使用两个索引从另一个数组向数组添加新属性。
例如,假设我有以下数组:
initArray = [
{ name: 'John', family: 'Doe'},
{ name: 'Joanna', family: 'Doe'}
];
我想从中获取并将其推入的数组initArray
:
genderArray = [
{ gender: 'Male' },
{ gender: 'Female' }
];
我需要的是一个最终的数组,例如:
initArray = [
{ name: 'John', family: 'Doe', gender: 'Male'},
{ name: 'Joanna', family: 'Doe', gender: 'Female'}
];
我尝试了以下方法:
ngOnInit() {
Object.keys(this.genderArray).forEach((idx) => {
console.log(this.initArray)
this.initArray[idx].push(this.genderArray)
});
console.log(this.initArray)
}
但是返回了以下错误:
错误:_this.initArray [idx] .push不是函数
这是一堆堆炸弹。
首先,你不应该推到initArray
:你不添加元素到initArray
,而是一个属性添加到它的每个元素。
一种可能的方法是:
Object.assign(this.initArray[idx], this.genderArray[idx]);
...,或者,出于某种原因,如果您想创建一个全新的新“丰富”对象数组,而不是直接修改对象:
this.initArray[idx] = {...this.initArray[idx], ...this.genderArray[idx]};
其次,不要使用Object.keys()遍历数组:forEach()
如果在函数内进行了所有转换map
,则使用;如果返回一个新元素并希望最后有一个新数组,请使用。
因此,您的函数可能如下所示:
ngOnInit() {
this.genderArray.forEach((element, index) => {
Object.assign(this.initArray[index], element);
});
console.log(this.initArray)
}
... 要么 ...
ngOnInit() {
this.initArray = this.initArray.map((element, index) => {
{ ...element, ...this.genderArray[index] }
});
console.log(this.initArray)
}
就个人而言,我总是发现代码'x = x.map(transformer())`非常可疑(如果仍然重新分配,为什么不使用forEach?),但这取决于实现样式的选择。
如果要“混合”的数组元素中不止一个属性,但您只想取一个,则可以直接使用:
Object.assign(this.initArray[idx], { gender: this.genderArray[idx].gender });
...在任务中使用解构:
const { gender } = this.genderArray[idx];
Object.assign(this.initArray[idx], { gender });
...或者只是硬着头皮做任务,就像在过去的无语法语法的美好日子里那样:
this.initArray[idx].gender = this.genderArray[idx].gender;
在这种特殊情况下,最后一个实际上看起来是最好的方法。它的缺点是必须重复属性名称,但是如果您希望在源数组和目标数组中对props进行不同的命名,这也可能会派上用场。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句