-2

我有一个对象数组,其中包含具有相似结构的对象。我需要为数组中的所有对象添加一个新的键值对。如何在不循环整个数组的情况下做到这一点。

提供我需要的输出示例,

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:尝试使用传播运算符很少或没有成功。

4

2 回答 2

1

如何在不循环整个数组的情况下做到这一点。

你不能(合理地)。完全不合理的方法是将它添加到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;
}

于 2017-10-26T09:34:10.653 回答
1

您可以在数组和Object.assign()上使用map()运算符来附加键、值对

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

于 2017-10-26T12:17:55.513 回答