Вставка новой пары ключ-значение для всех объектов в массиве объектов без зацикливания

У меня есть массив объектов, содержащих объекты с похожей структурой. Мне нужно добавить новую пару ключ-значение для всех объектов в массиве. Как я могу сделать это без зацикливания всего массива.

Предоставляя пример вывода, который мне требуется,

let arr = [{a:1,b:2}, {a:2,b:3}];
let key = c;
let value = 3;

Требуемый вывод будет как,

//arr2 = [ {a:1,b:2,c:3}, {a:2,b:3,c:3}]

PS: пробовал использовать оператор спреда с небольшим успехом или без него.

2 ответа

Решение

Как я могу сделать это без зацикливания всего массива.

Вы не можете (разумно). Совершенно неразумным способом было бы добавить его к Object.prototype, который наследуется всеми объектами, и, таким образом, добавил бы его ко всем объектам в массиве - и везде.

Но опять же: вы не можете разумно, вам нужно цикл (в той или иной форме). Этот цикл может быть рекурсией функционального программирования, но в основном это цикл.

Вот рекурсивный технически не петлевой способ:

let arr = [{a:1,b:2}, {a:2,b:3}];
let el  = {c:3};
(function go(a, i, e) {
    if (i < a.length) {
        a[i].c = e.c;
        go(a, i + 1, e);
    }
})(arr, 0, el);
console.log(arr);
.as-console-wrapper {
  max-height: 100% !important;
}

Вы можете использовать оператор map() для массива и Object.assign() для добавления ключа, пары значений

 let arr = [{a:1,b:2}, {a:2,b:3}];
 let finalArray = arr.map(function(obj){return Object.assign(obj,{c:3});})
console.log(finalArray);
 

Другие вопросы по тегам