![](/img/trans.png)
[英]Filter array of objects against another array of objects. Remove items with array values that matches those inside another array of objects
[英]Redux - Filter / Delete multiple items from array of objects. Items to be filtered given in another array
我有一個初始 state 變量,它是一個對象數組,並且想要過濾/刪除另一個數組中給出的多個對象,其中包含要在有效負載中過濾的對象的 id
const initialState = {
data: [
{
name: "apple",
id: 1
},
{
name: "orange",
id: 2
},
{
name: "broccoli",
id: 3
},
{
name: "spinach",
id: 4
},
]
}
export default (state = initialState, { type, payload }) => {
switch (type) {
case FILTER_ITEMS:
//filteredArray =
return {
...state,
data: filteredArray
}
}
我想從初始狀態中過濾沒有有效載荷內數組中給出的 id 的項目
payload = {
excludeIds = [2,4]
}
所以在 reducer 運行后,initialState 應該更改為:
state = {
data: [
{
name: "apple",
id: 1
},
{
name: "broccoli",
id: 3
},
]
}
使用Array.filter()
和Array.includes()
來獲取所有項目,其中id
不會出現在排除數組中:
const initialState = {"data":[{"name":"apple","id":1},{"name":"orange","id":2},{"name":"broccoli","id":3},{"name":"spinach","id":4}]} const state = initialState; const payload = { excludeIds: [2, 4] } const result = state.data.filter(o =>.payload.excludeIds.includes(o.id)) console.log(result)
在減速機中:
export default (state = initialState, { type, payload }) => {
switch (type) {
case FILTER_ITEMS:
const data = state.data.filter(o => !payload.excludeIds.includes(o.id))
return {
...state,
data
}
}
如果排除數組可能很大,則可以使用Set
,因為從 Set 中獲取項目的復雜度為 O(1):
const initialState = {"data":[{"name":"apple","id":1},{"name":"orange","id":2},{"name":"broccoli","id":3},{"name":"spinach","id":4}]} const state = initialState; const payload = { excludeIds: [2, 4] } const exclude = new Set(payload.excludeIds) const result = state.data.filter(o =>.exclude.has(o.id)) console.log(result)
您可以使用數組的indexOf function
。
filteredArray = state.data.filter(ele => payload.excludeIds.indexOf(ele.id) < 0 ? true : false)
測試:
const initialState = { data: [ { name: "apple", id: 1 }, { name: "orange", id: 2 }, { name: "broccoli", id: 3 }, { name: "spinach", id: 4 }, ] } const payload = { excludeIds: [2,4] } filteredArray = initialState.data.filter(ele => payload.excludeIds.indexOf(ele.id) < 0? true: false) console.log(filteredArray)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.