我有三個物件陣列。第一個物件陣列是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我們需要在洗掉前一個物件后添加新物件。
所以結果應該在帶有 values 的物件陣列的末尾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
},
]
如果firstArrCompare 和secondArrCompare為空,則不應添加或洗掉任何內容。里面的值總是一對一的——所以在 firstArrCompare 中一個具有相同 id 的值在 secondArrCompare 中有一個。
也可能有多個具有不同 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;
})
})
uj5u.com熱心網友回復:
對您的實作進行一些更改。必須過濾兩者id和組合匹配,否則將洗掉number所有元素。id:1我們從中得到newArr。
之后回圈firstArrCompare并添加到newArrayif 元素與相同id的存在于newArr
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/434344.html
標籤:javascript 数组
上一篇:打字稿中的嵌套過濾器
下一篇:如何過濾json檔案中的資料?
