I have an array of objects i.e queueDetails[{},{}]
. I have another array of ids from response
"payload":[{"id":"1"},{"id":"2"}]
.
I want to filter
out the ids in payload from queueDetails
for which I have following code:
action.payload.map(payload => {
state.queueDetails.filter(queue => queue._id !== payload.id)
})
return {
...state,
queueDetails: ???
}
How do I proceed from here.
I think, it's safe to guess, you're building part of Redux store reducer, if that's the case, corresponding case
section for filtering action may be something, like:
case FILTER_QUEUE_DETAILS : {
const { queueDetails } = state,
{ payload } = action,
submittedIds = payload.map(({id}) => id)
return {...state, queueDetails: queueDetails.filter(({id}) => !submittedIds.includes(id))}
}
You may find the quick demo below:
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>