如何比较三个对象数组,以便添加或删除新值



我有三个对象数组。第一个对象数组是original state

let originalArrState = [
{
id:1,
name:'Name 1 from id 1',
number: 15 // => this needs to be removed based on the value `number`
// in secondArrCompare - because we have there object with id of 1
},
{
id:1,
name:'Name 2 from id 1',
number: 125
},
{
id:1,
name:'Name 3 from id 1',
number: 130
},
// 135 needs to be added based on the value `number` in firstArrCompare because we have there 
// object with id of 1
]

现在我有另外两个对象数组,我需要将它们与原始的arr 进行比较

let firstArrCompare = [
{
id:1,
number:135
}
]
let secondArrCompare = [
{
id:1,
number:15
}
]

其思想是它需要是动态的,因此基于secondArrCompare中的值,我们需要从originalArrState中删除对象,并且基于firstArrCompare,我们需要在删除前一个对象之后添加新对象。

因此,结果应该在值为125 130 135的对象的末尾数组中。

let originalArrState = [
{
id:1,
name:'Name 2 from id 1',
number: 125
},
{
id:1,
name:'Name 3 from id 1',
number: 130
},
{
id:1,
number: 135
},
]

如果firstArrComparesecondArrCompare为空,则不应添加或删除任何内容。里面的值总是一对一,所以firstArrCompare和secondArrCompare中有一个id相同的值。

此外,可能会有多个具有另一个id的对象,例如id-2,它会使原始状态发生变化。

例如

let firstArrCompare = [
{
id:1,
number:135
},
{
id:2,
number:1000
}
// we search for id 2 in original arr so we can add this after the removing
]
let secondArrCompare = [
{
id:1,
number:15
},
{
id:2,
number:100
}
// now we need to search for id 2 in original arr to remove that
]

所以,如果第一个arr中有id 1,那么第二个数组中总会有id为1的对象——所以是一对一关系。

我被困在

var newArr = originalArrState.filter(itemOne => {
return !secondArrCompare.some(itemTwo => {
return itemOne.id == itemTwo.id;
})
})

对实现进行一些更改。必须过滤idnumber组合匹配,否则将移除所有具有id:1的元素。我们从中得到newArr
如果newArr中存在具有相同id的元素,则在firstArrCompare上循环并添加到newArray之后

let originalArrState = [{
id: 1,
name: 'Name 1 from id 1',
number: 15
},
{
id: 1,
name: 'Name 2 from id 1',
number: 125
},
{
id: 1,
name: 'Name 3 from id 1',
number: 130
},
]
let firstArrCompare = [{
id: 1,
number: 135
},
{
id: 2,
number: 1000
}
]
let secondArrCompare = [{
id: 1,
number: 15
},
{
id: 2,
number: 100
}
]
var newArr = originalArrState.filter(itemOne => {
return !secondArrCompare.some(itemTwo => {
return itemOne.id === itemTwo.id && itemOne.number === itemTwo.number;
})
})
firstArrCompare.forEach((el) => {
if (newArr.some((item) => item.id===el.id)){
newArr.push(el)
}
})
console.log(newArr)

最新更新