190

次のようなオブジェクトがあります。

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の方法はありますか?

4

10 に答える 10

289

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: stToKeep});
于 2014-01-22T11:17:13.970 に答える
30

バニラJSを使用するだけです。splice要素を削除するために使用できます。

obj.subTopics.splice(1, 1);

デモ

于 2014-01-22T11:15:52.780 に答える
27

あなたはそれを行うことができます_pull

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

参照を確認する

于 2014-01-22T11:17:20.220 に答える
8

私が知っているように、これを行うには4つの方法があります

const array = [{id:1,name:'Jim'},{id:2,name:'Parker'}];
const toDelete = 1;

最初:

_.reject(array, {id:toDelete})

2 つ目は次のとおりです。

_.remove(array, {id:toDelete})

このようにして、配列が変更されます。

3 つ目は次のとおりです。

_.differenceBy(array,[{id:toDelete}],'id')
// If you can get remove item 
// _.differenceWith(array,[removeItem])

最後のものは次のとおりです。

_.filter(array,({id})=>id!==toDelete)

私は学んでいますlodash

後で見つけられるように、記録を残すために回答してください。

于 2019-10-16T02:49:14.683 に答える
2

@thefourtheye の回答に加えて 、従来の匿名関数の代わりに述語を使用します。

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

また

obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
    return currentObject.subTopicId !== stToDelete;
});
于 2017-04-25T11:20:06.937 に答える
1

ロダッシュとタイプスクリプト

const clearSubTopics = _.filter(obj.subTopics, topic => (!_.isEqual(topic.subTopicId, 2)));
console.log(clearSubTopics);
于 2019-01-11T09:22:44.490 に答える