web-dev-qa-db-ja.com

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を使用する効率的な方法はありますか?objオブジェクトから{"subTopicId":2, "number":32}

またはこれを行うJavaScriptの方法はありますか?

141

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});
223
thefourtheye

Vanilla JSを使ってください。要素を削除するには、 splice を使用します。

obj.subTopics.splice(1, 1);

デモ

26
Andy

あなたは_pullでそれをすることができます。

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

参照を確認してください

19
semirturgay

これで、 _。reject を使用できるようになります。

配列に対してのみ機能する_.pull_.removeとは異なり、._rejectはあらゆるCollectionに対して機能します。

obj.subTopics = _.reject(obj.subTopics, (o) => {
  return o.number >= 32;
});
15
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

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