在不循环的情况下向对象数组中的所有对象插入新的键值对
Inserting a new key-value pair to all objects in an array of objects without looping
我有一个对象数组,其中包含具有相似结构的对象。我需要向数组中的所有对象添加一个新的键值对。我怎样才能不循环整个数组。
提供我需要的输出示例,
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}]
P.S:尝试使用扩展运算符,但收效甚微。
How can I do it without looping the entire array.
你不能(合理)。 完全不合理的 方法是将它添加到 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);
我有一个对象数组,其中包含具有相似结构的对象。我需要向数组中的所有对象添加一个新的键值对。我怎样才能不循环整个数组。
提供我需要的输出示例,
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}]
P.S:尝试使用扩展运算符,但收效甚微。
How can I do it without looping the entire array.
你不能(合理)。 完全不合理的 方法是将它添加到 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);