Object.assign不在循环中按预期复制

时间:2018-05-04 19:15:34

标签: javascript

迭代一组对象。在我的循环中,我想只复制一个键值对并将其推入一个summaryList数组。我无法理解为什么item.Cusip仍然等于item。我希望只有cusipObj才能生活在pick中。

最初,我尝试使用lodash Object.assign方法并遇到了同样的问题。

我知道对象是通过引用传递的,但我的印象是item.Cusip解决了这个问题。有人可以澄清我如何只将list = [{ Id:90, Cusip:"114760EM9", UserQuantity:null, UserPrice:null, UserSettlementDate:null }] summaryList = []; list.forEach((item) => { let cusipObj = Object.assign({Cusip: item.Cusip}, item); console.log(cusipObj); summaryList.push(cusipObj); }) 值复制到新对象中吗?我做错了什么?

{{1}}

2 个答案:

答案 0 :(得分:4)

您只需要映射想要的财产。

var list = [{ Id: 90, Cusip: "114760EM9", UserQuantity: null, UserPrice: null, UserSettlementDate: null }],
    summaryList = list.map(({ Cusip }) => ({ Cusip }));

console.log(summaryList);

如评论中所述,Object.assign

Object.assign({Cusip: item.Cusip}, item);

将单个属性分配给整个对象,该对象通向所有属性的同一对象。

答案 1 :(得分:0)

Object.assign所有属性从源参数复制到目标。目标是第一个参数,源参数是其他参数。

在您的示例中,您将 item的所有属性分配给{Cusip: item.Cusip}对象,因此Object.assign的结果具有完全相同的形状为item

这是一个具体的例子:

const foo = { foo: 'foo', bar: 'bar' }
const fooAssigned = Object.assign({ foo: 'foo' }, foo)
console.log(fooAssigned) // { foo: 'foo', bar: 'bar' }

如果你打算选择Cusip属性,你可以这样做:

summaryList = [];

list.forEach((item) => {
  let cusipObj = {Cusip: item.Cusip}
  console.log(cusipObj);
  summaryList.push(cusipObj);
})

甚至更简洁

const list = [{  
       Id:90,
       Cusip:"114760EM9",
       UserQuantity:null,
       UserPrice:null,
       UserSettlementDate:null
    }]
       
const summaryList = list.map(item => ({ Cusip: item.Cusip }))

console.log(summaryList)