I have array of objects containing ids that look like this:
selectedParameters = [
{
operationID: "5f1def6a3f15e2fde38d8b13",
operatorID: "5f241ea9a28f1a5700bfb82a"
},
{
operationID: "5f1def6a3f15e2fde38d8b13",
operatorID: "5f241ea9a28f1a5700bfb829"
},
{
operationID: "5f1def6a3f15e2fde38d8b13",
operatorID: "5f241ea9a28f1a5700bfb828"
},
{
operationID: "5f1def7c3f15e2fde38d8b14",
operatorID: "5f241ea9a28f1a5700bfb82a"
},
{
operationID: "5f1def7c3f15e2fde38d8b14",
operatorID: "5f241ea9a28f1a5700bfb829"
},
]
I have a method which takes in an object having exact properties like above and then I want to check both operationID and operatorID of incoming object and delete that object from above array on exact match. I have a method that attempted to do that as shown below:
const deleteSelectedParameter = (removedParamObj) => {
selectedParameters.filter(
(selectedParam) =>
(selectedParam.operationID !==
removedParamObj.operationID) &&
(selectedParam.operatorID !== removedParamObj.operatorID)
)
};
However, I upon deleting it deletes multiple objects even though only one matches.
There is some error in the binary logic. You can try the following code:
const deleteSelectedParameter = (removedParamObj) => {
return selectedParameters.filter(
(selectedParam) =>
!((selectedParam.operationID === removedParamObj.operationID) && (selectedParam.operatorID === removedParamObj.operatorID))
)
};
This is a basic binary logic error.
What you want for filter()
's callback is this:
return false if opID equals and operID equals.
Which is return == !(opIDEq && operIDEq) == opIDNeq || operIDNeq
return == !(opIDEq && operIDEq) == opIDNeq || operIDNeq
.
What you did was return == operIDNeq && operIDNeq
.
So basically, change your &&
to ||
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.