it-swarm.com.ru

Как я могу удалить элемент из списка с помощью 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?

129
Samantha J T Star

Как отметили в комментариях lyyons, более идиоматичным и дерзким способом сделать это было бы использование _.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});
210
thefourtheye

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

obj.subTopics.splice(1, 1);

Демо

22
Andy

вы можете сделать это с _pull

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

проверьте ссылка

17
semirturgay

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

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

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

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

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

OR

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

Вот простая функция lodash с массивом и удаление ее с индексным номером.

index_tobe_delete = 1

fruit = [{a: "Apple"}, {b: "banana"}, {c: "choco"}]
_.filter(fruit, (value, key)=> {
return (key !== index_tobe_delete)
})
0
Anupam Maurya

lodash и TypeScript

let stToDelete = 2;
const clearSubTopics = _.filter(obj.subTopics, topic = (!_.isEqual(topic.subTopicId, stToDelete)));
console.log(clearSubTopics);
0
Uliana Pavelko