Удалить объект на основе двух параметров из списка массивов - PullRequest
0 голосов
/ 06 августа 2020

Я хочу удалить этот объект

    {
        "taskNo": 1,
        "milestoneNo" : 1,
    }

Из всего этого массива

  "milestoneList" : [
{
    "milestoneTaskName" : {   
        "milestoneNo" : 1,
        "taskName": "test",  
    },
    "milestoneTask" : [
    {
        "taskNo": 1,
        "milestoneNo" : 1,
    },{
        "taskNo": 2,
        "milestoneNo" : 1,
    }
    ]
},
{
    "milestoneTaskName" : {
        "milestoneNo" : 2,
        "taskName": "test",
               },
    "milestoneTask" : [
    {  
        "taskNo": 1,
       "milestoneNo" : 2,
    },{
        "taskNo": 2,
        "milestoneNo" : 2,
    }
    ]
}
]

Я пытался сделать это, но это не работает. Я применил два условия взамен, но они не возвращают фактический результат. Здесь идентификатор равен 1, а номер мили - 1

        milestoneList.map((obj)=>{
     if(typeof obj.milestoneTask !== 'undefined' && obj.milestoneTask.length > 0){
       obj.milestoneTask = obj.milestoneTask.filter(function(val) {
          return val["taskNo"] !== id && val["milestoneNo"] !== mileNo;
          });
         }
       })

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вы хотите, чтобы одно свойство отличалось, а не оба. Таким образом, вместо этого следует использовать логический оператор или.

return val["taskNo"] !== id || val["milestoneNo"] !== mileNo;
0 голосов
/ 06 августа 2020

Я думаю, что это тот оператор сравнения, который вам нужен

!(val["taskNo"] === id && val["milestoneNo"] === mileNo)

Это вернет false, только если совпадают и id, и mileNo. Утверждение, которое вы вернули false, если совпадают идентификаторы или mileNo.

const milestoneList = [{
    "milestoneTaskName": {
      "milestoneNo": 1,
      "taskName": "test",
    },
    "milestoneTask": [{
      "taskNo": 1,
      "milestoneNo": 1,
    }, {
      "taskNo": 2,
      "milestoneNo": 1,
    }]
  },
  {
    "milestoneTaskName": {
      "milestoneNo": 2,
      "taskName": "test",
    },
    "milestoneTask": [{
      "taskNo": 1,
      "milestoneNo": 2,
    }, {
      "taskNo": 2,
      "milestoneNo": 2,
    }]
  }
]

const id = 1;
const mileNo = 1;

milestoneList.map((obj) => {
  if (typeof obj.milestoneTask !== 'undefined' && obj.milestoneTask.length > 0) {
    obj.milestoneTask = obj.milestoneTask.filter(function(val) {
      return !(val["taskNo"] === id && val["milestoneNo"] === mileNo);
    });
  }
})

console.log(milestoneList)
...