web-dev-qa-db-fra.com

Comment puis-je supprimer un élément d'une liste avec lodash?

J'ai un objet qui ressemble à ceci:

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;

J'ai lodash installé dans mon application pour d'autres choses. Existe-t-il un moyen efficace d'utiliser lodash pour supprimer l'entrée: {"subTopicId":2, "number":32} de l'objet obj?

Ou existe-t-il un moyen javascript de le faire?

129
Samantha J T Star

Comme le soulignent les lyonnais dans les commentaires, une façon plus idiomatique et lodash de faire cela serait d'utiliser _.remove , comme ceci

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

En dehors de cela, vous pouvez transmettre une fonction de prédicat dont le résultat sera utilisé pour déterminer si l'élément actuel doit être supprimé ou non.

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

Sinon, vous pouvez créer un nouveau tableau en filtrant l'ancien avec _.filter et en l'affectant au même objet, comme ceci

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

Ou

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

Il suffit d'utiliser Vanilla JS. Vous pouvez utiliser splice pour supprimer l'élément:

obj.subTopics.splice(1, 1);

Démo

22
Andy

vous pouvez le faire avec _pull

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

vérifier la référence

17
semirturgay

Vous pouvez maintenant utiliser _.reject qui vous permet de filtrer en fonction de ce que vous devez supprimer, au lieu de ce que vous devez conserver.

contrairement à _.pull ou _.remove qui ne fonctionne que sur des tableaux, ._reject fonctionne sur toutes les variables Collection

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

En plus de la réponse @thefourtheye, utilisez prédicat au lieu des fonctions anonymes traditionnelles:

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

OR

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

Voici la fonction lodash simple avec tableau et le supprimer avec le numéro d’index.

index_tobe_delete = 1

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

lodash et TypeScript

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