为了账号安全,请及时绑定邮箱和手机立即绑定

Object.assign输出不正确

Object.assign输出不正确

PIPIONE 2021-04-06 13:14:10
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属性的值。但仅成为价格属性,其他属性消失了,怎么了?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

您需要迭代该数组,并将该对象分配给具有相同索引的对象。


var data = [ { price: 1, name: 'qq' }, { price: 2, name: 'ww' }],

    newData = [ { price: 100 }, { price: 200 }];


data.forEach((o, i) => Object.assign(o, newData[i]));


console.log(data);


查看完整回答
反对 回复 2021-04-22
?
慕斯王

TA贡献1864条经验 获得超2个赞

这是因为您将完全覆盖其他属性,就像data数组一样,合并是基于数组的索引进行的。


因此0,data数组的索引将被匹配0的newData数组的索引替换,因此整个对象将被替换。


根据MDN文档:


如果目标对象中的属性具有相同的键,则它们将被源中的属性覆盖。


因此,这里将数组索引视为匹配键。


对于数组中的每个条目,尝试合并如下所示的对象:


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)


查看完整回答
反对 回复 2021-04-22
?
杨魅力

TA贡献1811条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-04-22
  • 3 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信