#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)