このようなオブジェクトがあります。
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の方法はありますか?
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});
これで、 _。reject を使用できるようになります。
配列に対してのみ機能する_.pull
や_.remove
とは異なり、._reject
はあらゆるCollection
に対して機能します。
obj.subTopics = _.reject(obj.subTopics, (o) => {
return o.number >= 32;
});
@thefourtheye答えに加えて、伝統的な無名関数の代わりに述語を使う:
_.remove(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});
OR
obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});
これは配列を使った単純なlodash関数で、インデックス番号を使ってそれを削除します。
index_tobe_delete = 1
fruit = [{a: "Apple"}, {b: "banana"}, {c: "choco"}]
_.filter(fruit, (value, key)=> {
return (key !== index_tobe_delete)
})
lodashとTypeScript
const clearSubTopics = _.filter(obj.subTopics, topic => (!_.isEqual(topic.subTopicId, 2)));
console.log(clearSubTopics);