迭代一组对象。在我的循环中,我想只复制一个键值对并将其推入一个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}}
答案 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)