我的问题与Add key value pair to all objects in array
有关但是,当我尝试分配对象而不是字符串,整数等时,解决方案不起作用。
我试图在map函数中创建新的键,但是它仅适用于非对象变量。
这有效
arrObjects.map(item => item.newKey = 'xxx')
这不是
var obj = { a: 'a', b: 'b', c: 'c' }
arrObjects.map(item => item.newKey = obj)
输出:
var arrOfObj = [{
name: 'eve'
}, {
name: 'john'
}, {
name: 'jane'
}];
var obj = {
a: 'a',
b: 'b',
c: 'c'
}
arrOfObj.map(item => item.newKey = obj);
console.log(arrOfObj);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 0 :(得分:3)
您需要使用...
(扩展运算符)
var arrOfObj = [{ name: 'eve' }, { name: 'john' }, { name: 'jane' }];
var obj = { a: 'a', b: 'b', c: 'c' };
arrOfObj.forEach(item => item.newKey = {...obj});
console.log(arrOfObj);
.as-console-wrapper { max-height: 100% !important; top: 0; }
或者,使用JSON
:
var arrOfObj = [{ name: 'eve' }, { name: 'john' }, { name: 'jane' }];
var obj = { a: 'a', b: 'b', c: 'c' };
arrOfObj.forEach(item => item.newKey = JSON.parse(JSON.stringify(obj)));
console.log(arrOfObj);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
您需要创建对象的副本。默认情况下,对象被分配为参考。
这里...
用于创建浅表副本
var arrOfObj = [{name: 'eve'}, {name: 'john'}, { name: 'jane'}];
var obj = { a: 'a', b: 'b', c: 'c'}
arrOfObj.forEach(item => (item.newKey = {...obj}));
console.log(arrOfObj);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以看到一些用例here
答案 2 :(得分:2)
一种替代方法是使用Object.assign()。请记住,对象是通过引用的值复制的,这就是您的问题,而不是每个newKey
都有一个新的对象,而是对同一个对象有多个引用。
var arrOfObj = [
{name: 'eve'},
{name: 'john'},
{name: 'jane'}
];
var obj = { a: 'a', b: 'b', c: 'c' };
arrOfObj.map(item => item.newKey = Object.assign({}, obj));
console.log(arrOfObj);
// After some modification.
arrOfObj[0].newKey.a = "XXX"
console.log(arrOfObj);
答案 3 :(得分:0)
您必须克隆该项目,将同一对象添加到多个属性中。
请参阅下面的内容。
<body <?php body_class(); ?>>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-P538SGM" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->