Object.assign输出不正确

时间:2019-04-08 08:12:25

标签: javascript

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 个答案:

答案 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);