javascript: получить новый массив из старого массива с дополнительным параметром для каждого элемента
У меня есть массив элементов и каждый элемент обязательно содержит поле value и может содержать поле id
Требуется получить новый массив в котором у каждого элемента будет задано поле id и если оно не было задано у первоначального массива, то у нового должно равняться полю value.
Мой код:
let data_new = data_old.map(obj => {
obj['id'] = obj['id'] || obj.value;
return obj;
});
Подскажите пожалуйста позволяет ли javascript делать более понятный, простой код с тем же функционалом? А то может я микроскопом гвозди забиваю.
Можно ли в одну строку сделать такое преобразование?
Причем необходимо именно выполнить присваивание новой переменной, поэтому forEach как-то не очень подходит - опять же будет 2 команды: изменение старого массива и назначение его новому.
Ответы (2 шт):
let data_old = [
{id: 12, value: 34},
{value: 56}
];
let data_new = data_old.map(obj => (obj.id = obj.id || obj.value, obj));
console.log(data_new);
Но Вы понимаете, конечно, что объекты в старом массиве тоже изменятся, так как это те же самые объекты.
let data_old = [
{id: 12, value: 34},
{value: 56}
];
let data_new = data_old.map(obj => [obj.id = obj.id || obj.value, obj][1]);
console.log(data_new);
Нашел еще один вариант решения без предупреждения Unexpected use of comma operator no-sequences:
let data_new = data_old.map(obj => ({...obj, 'id': obj['id'] || obj['value']}));
console.log(data_new);