次のようなオブジェクトの配列があります。
var a = [
{id: 1, name: 'A'},
{id: 2, name: 'B'},
{id: 3, name: 'C'},
{id: 4, name: 'D'}
];
そして、配列Aから削除したいID配列:
var removeItem = [1,2];
array a
に含まれるIDを照合して、removeItem array
からオブジェクトを削除したい。 lodashで実装するにはどうすればよいですか。
Lodashの _。remove メソッドをチェックしましたが、配列から項目を削除するには特定の条件が必要です。しかし、私は削除したいIDのリストを持っています。
既に述べたように、_.remove
メソッドが必要であり、言及する特定の条件は、removeItem
配列に配列のチェックされた要素のid
が含まれているかどうかです。
var removeElements = _.remove(a, obj => removeItem.includes(obj.id));
// you only need to assign the result if you want to do something with the removed elements.
// the a variable now holds the remaining array
predicate
から.remove
メソッドにlodash
関数を渡す必要があります。
var final = _.remove(a, obj => removeItem.indexOf(obj.id) > -1);
indexOf
メソッドを使用します。
IndexOf()メソッドは、指定された要素が配列内で見つかる最初のインデックスを返します。存在しない場合は-1を返します。
パラメータとしてcallback関数を受け入れるnative
メソッドを使用して、filter
javascriptを使用して実行できます。
var a = [
{id: 1, name: 'A'},
{id: 2, name: 'B'},
{id: 3, name: 'C'},
{id: 4, name: 'D'}
];
var removeItem = [1,2];
a = a.filter(function(item){
return removeItem.indexOf( item.id ) == -1;
});
console.log(a);
ただし、filter
メソッドは、callback関数を適用して新しい配列を作成するだけです。
ドキュメントから:
Filter()メソッドは、提供された関数によって実装されたテストに合格したすべての要素を含む新しい配列を作成します。
元の配列を変更する場合は、splice
メソッドを使用します。
var a = [
{id: 1, name: 'A'},
{id: 2, name: 'B'},
{id: 3, name: 'C'},
{id: 4, name: 'D'}
];
var removeItem = [1,2];
removeItem.forEach(function(id){
var itemIndex = a.findIndex(i => i.id == id);
a.splice(itemIndex,1);
});
console.log(a);