Как удалить объект из массива, свойство которого равно нулю — Lodash

#javascript #lodash

#javascript #lodash

Вопрос:

У меня есть массив таких объектов:

 var a = [

  {
    "ClientSideAction": 1,
    "CompletedDate": "not null",
    "ItemDescription": "Step 1"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": null,
    "ItemDescription": "step 2"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": "not null",
    "ItemDescription": "Step 3"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": null,
    "ItemDescription": "step 4"
  }

];
  

Как мне удалить элементы, где CompletedDate == null ?

Я пробовал ._dropWhile , однако он останавливается, как только функция возвращает falsey, что не то, что я хочу. Я хочу перебрать все объекты и удалить те, которые соответствуют этому условию. Теперь я знаю, что могу использовать для этого обычный js, но я бы хотел использовать lodash, если это возможно. Я новичок в Lodash, и я пытаюсь стать лучше.

Это был .dropWhile, который я использовал:

 var a2 = _.dropWhile(a, function(o) { return o.CompletedDate == null; });
  

Комментарии:

1. Пожалуйста, покажите свой код, который вы уже пробовали.

Ответ №1:

Вы можете использовать собственный Array.filter() для фильтрации элементов.

 var a = [
  {
    "ClientSideAction": 1,
    "CompletedDate": "not null",
    "ItemDescription": "Step 1"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": null,
    "ItemDescription": "step 4"
  }
];

var b = a.filter(function(item) {
  return item.CompletedDate !== null;
});

console.log(b);  

Это может быть дополнительно упрощено в современных браузерах или nodejs с помощью функций со стрелками:

 var b = filter((x => x.CompletedDate !== null);
  

Ответ №2:

Нет необходимости в lodash, просто фильтруйте

 var res = a.filter(x => x.CompletedDate !== null);
  

Комментарии:

1. Я почти уверен, что OP означал, что все CompletedDate , что не равно null, является строкой, а не буквальным строковым сообщением "not null" .

2. Вероятно, вы правы, но в таком случае почему бы просто не исключить поле в объявлении?

3. Возможно, они не объявляют его, его можно извлечь из API. Это или их реализация могут зависеть от существующего поля, null или иного.

Ответ №3:

Вы можете использовать массив.Фильтр

 var a = [

  {
    "ClientSideAction": 1,
    "CompletedDate": "not null",
    "ItemDescription": "Step 1"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": null,
    "ItemDescription": "step 2"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": "not null",
    "ItemDescription": "Step 3"
  },
  {
    "ClientSideAction": 1,
    "CompletedDate": null,
    "ItemDescription": "step 4"
  }
];

var a = a.filter(function(v) {
  return v.CompletedDate != null;
})

console.log(a)