Object.assign输出不正确

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属性的值。


但仅成为价格属性,其他属性消失了,


怎么了?


PIPIONE
浏览 235回答 3
3回答

RISEBY

您需要迭代该数组,并将该对象分配给具有相同索引的对象。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);

慕斯王

这是因为您将完全覆盖其他属性,就像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)

杨魅力

遍历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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript