我想通过另一个数组中的 id 过滤掉一个对象数组
I want to filter out an array of objects by ids in another array
我有一个对象数组,即 queueDetails[{},{}]
。我有另一个来自响应的 id 数组
"payload":[{"id":"1"},{"id":"2"}]
。
我想 filter
从 queueDetails
中提取有效载荷中的 ID,为此我有以下代码:
action.payload.map(payload => {
state.queueDetails.filter(queue => queue._id !== payload.id)
})
return {
...state,
queueDetails: ???
}
我该如何从这里开始。
我认为,可以安全地猜测,您正在构建 Redux store reducer 的一部分,如果是这样的话,相应的 case
过滤操作部分可能是这样的:
case FILTER_QUEUE_DETAILS : {
const { queueDetails } = state,
{ payload } = action,
submittedIds = payload.map(({id}) => id)
return {...state, queueDetails: queueDetails.filter(({id}) => !submittedIds.includes(id))}
}
您可以在下面找到快速演示:
const { createStore } = Redux
const defaultState = {queueDetails:[{id:1,data:'somedata'},{id:2,data:'moredata'},{id:3,data:'somemore'}]},
FILTER_QUEUE_DETAILS = 'FILTER_QUEUE_DETAILS',
appReducer = (state=defaultState, action) => {
switch(action.type) {
case FILTER_QUEUE_DETAILS : {
const { queueDetails } = state,
{ payload } = action,
submittedIds = payload.map(({id}) => id)
return {...state, queueDetails: queueDetails.filter(({id}) => !submittedIds.includes(id))}
}
default: return state
}
},
store = createStore(appReducer)
//initial state
console.log(`// initial state:\n`, store.getState())
//dispatch action to filter out id's 1, 3
store.dispatch({
type: FILTER_QUEUE_DETAILS,
payload: [{id:1},{id:3}]
})
//log resulting state
console.log(`// state upon id's 1 and 3 filtered out:\n`,store.getState())
.as-console-wrapper {min-height:100%}
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/4.0.5/redux.min.js"></script>
我有一个对象数组,即 queueDetails[{},{}]
。我有另一个来自响应的 id 数组
"payload":[{"id":"1"},{"id":"2"}]
。
我想 filter
从 queueDetails
中提取有效载荷中的 ID,为此我有以下代码:
action.payload.map(payload => {
state.queueDetails.filter(queue => queue._id !== payload.id)
})
return {
...state,
queueDetails: ???
}
我该如何从这里开始。
我认为,可以安全地猜测,您正在构建 Redux store reducer 的一部分,如果是这样的话,相应的 case
过滤操作部分可能是这样的:
case FILTER_QUEUE_DETAILS : {
const { queueDetails } = state,
{ payload } = action,
submittedIds = payload.map(({id}) => id)
return {...state, queueDetails: queueDetails.filter(({id}) => !submittedIds.includes(id))}
}
您可以在下面找到快速演示:
const { createStore } = Redux
const defaultState = {queueDetails:[{id:1,data:'somedata'},{id:2,data:'moredata'},{id:3,data:'somemore'}]},
FILTER_QUEUE_DETAILS = 'FILTER_QUEUE_DETAILS',
appReducer = (state=defaultState, action) => {
switch(action.type) {
case FILTER_QUEUE_DETAILS : {
const { queueDetails } = state,
{ payload } = action,
submittedIds = payload.map(({id}) => id)
return {...state, queueDetails: queueDetails.filter(({id}) => !submittedIds.includes(id))}
}
default: return state
}
},
store = createStore(appReducer)
//initial state
console.log(`// initial state:\n`, store.getState())
//dispatch action to filter out id's 1, 3
store.dispatch({
type: FILTER_QUEUE_DETAILS,
payload: [{id:1},{id:3}]
})
//log resulting state
console.log(`// state upon id's 1 and 3 filtered out:\n`,store.getState())
.as-console-wrapper {min-height:100%}
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/4.0.5/redux.min.js"></script>