Во-первых, вы не должны pu sh до initArray
: вы не добавляете элементы к initArray
, но вместо этого добавляете свойство к каждому из его элементов.
Один из возможных способов сделать это:
Object.assign(this.initArray[idx], this.genderArray[idx]);
... или, если по какой-то причине вы хотите создать совершенно новый массив новых «обогащенных» объектов вместо модификации объектов напрямую:
this.initArray[idx] = {...this.initArray[idx], ...this.genderArray[idx]};
Во-вторых, не используйте Object.keys () до go через массив: используйте либо 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?), но это зависит от выбора стиля реализации.
Если в элементах массива есть свойство« больше » чтобы быть «смешанным», но вы хотите только один, вы можете либо go direct:
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;
В этом конкретном случае последний выглядит как лучший подход на самом деле. Его недостатком является необходимость повторять имя свойства, но это также может пригодиться, если вы хотите, чтобы реквизиты назывались по-разному в исходном и целевом массивах.