假设我有两个数组 我希望得到的数组像这样 因此,如果第二个数组有一个对象,而第一个数组也有一个具有相同ID的对象,则将第一个对象替换为第二个数组对象。
目前,我尝试使用以下代码,但是它会检查每个值是否匹配,并且我只想基于id进行匹配 答案 0 :(得分:0) 这是一种 输出: 答案 1 :(得分:0) 使用lodash,您可以使用unionBy: let array1 = [{id: 1,name: "a"},{id: 2,name: "b"}]
let array2 = [{id: 1,name: 'c'},{id: 3,name: 'd'}]
let result = [{id: 1,name: 'c'},{id: 2,name: 'b'},{id: 3,name: 'd'}]
const uniqueArray = this.servicesdata.filter((item, index) => {
const _item = JSON.stringify(item);
return (
index ===
this.servicesdata.findIndex(obj => {
return JSON.stringify(obj) === _item;
})
);
});
console.log(uniqueArray);
2 个答案:
O(NlogN)
的方法。let array1 = [{id: 1,name: "a"},{id: 2,name: "b"}] // Let's say its size is N1
let array2 = [{id: 1,name: 'c'},{id: 3,name: 'd'}] // Let's say its size is N2
let duplicate = new Set() // A set to check for duplicate elements
let result = array2
array2.forEach((item)=>{ // O(N2logN2)
duplicate.add(item.id);
})
array1.forEach((item)=>{ // O(N1logN2)
// If `duplicate` does NOT have `item.id`, that means it's unique in array1, so add it to result
// Otherwise, skip it because for duplicates, we want value from array2
if(!duplicate.has(item.id))
result.push(item);
})
// Overall complexity of approach - O(N2logN2) + O(N1logN2) ==> O(NlogN)
console.log(result);
[ { id: 1, name: 'c' },
{ id: 3, name: 'd' },
{ id: 2, name: 'b' } ]
let array1 = [{id: 1,name: "a"},{id: 2,name: "b"}]
let array2 = [{id: 1,name: 'c'},{id: 3,name: 'd'}]
console.log(_.unionBy(array2, array1, 'id'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>