简体   繁体   中英

Deleting an object from array of objects based on values of entire object

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM