假设我有一个像这样的数组
let arrayOne = [{text="one", value=0},{text="two", value=0}]
let arrayTwo = [{text="two", value=5}]
所以arrayOne
将始终是我想要的整个对象集,但所有值都为0. arrayTwo
将具有此数组的子集,但始终具有值集。我想要的是,如果arrayTwo
中存在arrayOne
个对象,则将值复制到arrayOne
对象。
所以最后我想要
let arrayOne = [{text="one", value=0},{text="two", value=5}]
我做了类似的事,但我觉得我错过了一些es6魔法。
for (let orig of arrayOne) {
arrayTwo.find(item => {
if (item.value == orig.value) {
Object.assign(orig, item);
}
})
}
答案 0 :(得分:2)
是
arrayOne = arrayOne.map(item1 => {
return Object.assign(item1, arrayTwo.find(item2 => {
return item2 && item1.text === item2.text
}))
})
答案 1 :(得分:1)
我在JavaScript merging objects by id
中回答了类似的问题但是,由于您要更新其中一个初始数组,并且您说另一个是子集,您可以将其改进为
let arrayOne = [{text:"one", value:0},{text:"two", value:0}]
let arrayTwo = [{text:"two", value:5}]
var hash = Object.create(null);
arrayOne.forEach(obj => hash[obj.text] = obj);
arrayTwo.forEach(obj => Object.assign(hash[obj.text], obj));
console.log(arrayOne);
费用只是平均线性,O(arrayOne.length)
用于填充哈希值,O(arrayTwo.length)
用于分配,假设每个对象的属性很少。