Вы почти получили это. Ваша основная проблема заключалась в следующем:
aClone['newName'] = 'ab';
Вместо этого должно быть следующее:
item['newName'] = 'ab';
Предложение
Вы можете уменьшить часть своего кода, сопоставив непосредственно с clone.
- Используйте
map
вместо forEach
- Измените
item
вместо - Верните
item
var a = [{
'fName': 'a',
'lName': 'b'
}, {
'fName': 'a',
'lname': 'c'
}, {
'fName': 'x',
'lName': 'z'
}];
var aClone = JSON.parse(JSON.stringify(a)).map(item => {
if (item.fName == 'a') {
item['newName'] = 'ab';
} else if (item.fName = 'x') {
item['newName'] = 'cd';
}
return item;
});
console.log(aClone);
.as-console-wrapper { top: 0; max-height: 100% !important; }
Альтернатива
Вот альтернативный подход, использующий оператор распространения для клонирования элемента и применения нового свойства, вычисляемого переключателем.
var a = [{
'fName': 'a',
'lName': 'b'
}, {
'fName': 'a',
'lname': 'c'
}, {
'fName': 'x',
'lName': 'z'
}];
const calcNewName = (item) => {
switch (item.fName) {
case 'a' : return 'ab';
case 'x' : return 'cd';
default : return null;
}
}
const aClone = a.map(item => ({ ...item, 'newName' : calcNewName(item) }));
console.log(aClone);
.as-console-wrapper { top: 0; max-height: 100% !important; }