var data = [{
price: 1,
name: 'qq'
},
{
price: 2,
name: 'ww'
}
]
var newData = [{
price: 100
},
{
price: 200
}
]
Object.assign(data, newData)
console.log(data)
控制台
[
{
price: 100
},
{
price: 200
}
]
输出应为仅替换price属性的值。
但仅成为价格属性,其他属性消失
怎么了?
答案 0 :(得分:3)
您需要迭代数组并为该对象分配具有相同索引的对象。
http://localhost:9210/Index/Product/1
答案 1 :(得分:1)
这是因为您将完全覆盖其他属性,因为data
是一个数组,将根据数组的索引进行合并。
因此0
数组的第data
个索引将由0
数组的匹配的第newData
个索引替换,因此将替换整个对象。
根据MDN doc:
目标对象中的属性将被中的属性覆盖 源,如果它们具有相同的密钥。
因此,这里的数组索引被视为匹配键。
尝试为数组中的每个条目合并以下对象:
const data = [ { price: 1, name: 'qq' }, { price: 2, name: 'ww' }];
const newData = [ { price: 100 }, { price: 200 }];
const res = data.reduce((acc, ele, idx) => acc.concat(Object.assign({}, ele, newData[idx])),[]);
console.log(res)
答案 2 :(得分:0)
要么迭代data
并使用Object.assign
,要么使用扩展...
:
const data = [ { price: 1, name: 'qq' }, { price: 2, name: 'ww' }];
const newData = [ { price: 100 }, { price: 200 }];
data.map((o, i) => Object.assign(o, newData[i]));
console.log(data);