web-dev-qa-db-ja.com

Lodash ids配列を照合することにより、配列からオブジェクトを削除します

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

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のリストを持っています。

10
Gitesh Purbia

既に述べたように、_.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
8

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);