javascript: получить новый массив из старого массива с дополнительным параметром для каждого элемента

У меня есть массив элементов и каждый элемент обязательно содержит поле value и может содержать поле id

Требуется получить новый массив в котором у каждого элемента будет задано поле id и если оно не было задано у первоначального массива, то у нового должно равняться полю value.

Мой код:

let data_new = data_old.map(obj => {
    obj['id'] = obj['id'] || obj.value;
    return obj;
});

Подскажите пожалуйста позволяет ли javascript делать более понятный, простой код с тем же функционалом? А то может я микроскопом гвозди забиваю.

Можно ли в одну строку сделать такое преобразование?

Причем необходимо именно выполнить присваивание новой переменной, поэтому forEach как-то не очень подходит - опять же будет 2 команды: изменение старого массива и назначение его новому.


Ответы (2 шт):

Автор решения: Igor

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);

→ Ссылка
Автор решения: Zhihar

Нашел еще один вариант решения без предупреждения Unexpected use of comma operator no-sequences:

  let data_new = data_old.map(obj => ({...obj, 'id': obj['id'] || obj['value']}));

  console.log(data_new);
→ Ссылка