Как я могу удалить элемент из списка, с помощью lodash?



у меня есть объект, который выглядит так:



var obj = {
"objectiveDetailId": 285,
"objectiveId": 29,
"number": 1,
"text": "x",
"subTopics": [{
"subTopicId": 1,
"number": 1
}, {
"subTopicId": 2,
"number": 32
}, {
"subTopicId": 3,
"number": 22
}]
}
var stToDelete = 2;


у меня есть _lodash используется в моем приложении для других вещей. Есть ли эффективный способ использовать _lodash для удаления записи:{"subTopicId":2, "number":32} С obj объект или есть способ javascript, чтобы сделать это?

537   5  

5 ответов:

как указал Лионс в комментариях, более идиоматичным и лодаший способ сделать это было бы использовать _.remove, такой

_.remove(obj.subTopics, {
    subTopicId: stToDelete
});

кроме того, вы можете передать функцию предиката, результат которой будет использоваться для определения того, должен ли текущий элемент быть удален или нет.

_.remove(obj.subTopics, function(currentObject) {
    return currentObject.subTopicId === stToDelete;
});

кроме того, вы можете создать новый массив, отфильтровав старый с помощью _.filter и присвоить его тому же объекту, например это

obj.subTopics = _.filter(obj.subTopics, function(currentObject) {
    return currentObject.subTopicId === stToDelete;
});

или

obj.subTopics = _.filter(obj.subTopics, {subTopicId: stToDelete});

просто используйте vanilla JS. Вы можете использовать splice удалить элемент:

obj.subTopics.splice(1, 1);

демо

вы можете сделать это с помощью _pull.

_.pull(obj["subTopics"] , {"subTopicId":2, "number":32});

Регистрация ссылка

теперь вы можете использовать _.отклонить который позволяет фильтровать на основе того, что вам нужно избавиться, а не то, что вам нужно сохранить.

в отличие от _.pull или _.remove которые работают только на массивах,._reject работает на любом Collection

obj.subTopics = _.reject(obj.subTopics, (o) => {
  return o.number >= 32;
});

В дополнение к @ thefourtheye ответ, используя вместо традиционных анонимных функций:

  _.remove(obj.subTopics, (currentObject) => {
        return currentObject.subTopicId === stToDelete;
    });

или

obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
    return currentObject.subTopicId === stToDelete;
});

Comments

    Ничего не найдено.