wake-up-neo.com

Wie kann ich mit lodash ein Element aus einer Liste entfernen?

Ich habe ein Objekt, das so aussieht:

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;

Ich habe lodash für andere Dinge in meiner Anwendung installiert. Gibt es eine effiziente Möglichkeit, lodash zu verwenden, um den Eintrag: {"subTopicId":2, "number":32} aus dem obj-Objekt zu löschen?

Oder gibt es einen Javascript-Weg, um dies zu tun?

129

Wie Lyyons in den Kommentaren darauf hingewiesen hat, wäre die Verwendung von _.remove eine idiotischere und idiotischere Methode, dies zu tun

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

Abgesehen davon können Sie eine Prädikatfunktion übergeben, deren Ergebnis verwendet wird, um zu bestimmen, ob das aktuelle Element entfernt werden muss oder nicht.

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

Alternativ können Sie ein neues Array erstellen, indem Sie das alte mit _.filter filtern und es dem gleichen Objekt wie diesem zuordnen

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

Oder

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

Verwenden Sie einfach Vanilla JS. Sie können splice verwenden, um das Element zu entfernen:

obj.subTopics.splice(1, 1);

Demo

22
Andy

sie können es mit _pull machen. 

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

überprüfen Sie die Referenz

17
semirturgay

Sie können jetzt _.reject verwenden, um nach dem zu filtern, was Sie loswerden müssen, anstatt nach dem, was Sie behalten müssen.

im Gegensatz zu _.pull oder _.remove, die nur für Arrays funktionieren, arbeitet ._reject für jede Collection.

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

Zusätzlich zur @thefourtheye-Antwort verwenden Sie prädikat anstelle herkömmlicher anonymer Funktionen:

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

OR

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

Hier ist die einfache lodash-Funktion mit Array und Löschen mit der Indexnummer.

index_tobe_delete = 1

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

lodash und TypeScript

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