web-dev-qa-db-fra.com

Lodash Supprimer des objets du tableau en faisant correspondre le tableau des ID

J'ai un tableau d'objets comme:

var a = [
  {id: 1, name: 'A'},
  {id: 2, name: 'B'},
  {id: 3,  name: 'C'},
  {id: 4, name: 'D'}
];

Et tableau Ids que je veux supprimer du tableau A:

var removeItem = [1,2];

Je souhaite supprimer des objets de array a en faisant correspondre ses identifiants, qui removeItem array contient. Comment puis-je implémenter avec lodash.

J'ai vérifié la méthode _. Remove de lodash, mais cela nécessite une condition spécifique pour supprimer un élément du tableau. Mais j'ai une liste d'identifiants que je souhaite supprimer.

10
Gitesh Purbia

Comme vous l'avez mentionné, vous avez besoin du _.remove et la condition spécifique que vous mentionnez est de savoir si le tableau removeItem contient le id de l'élément vérifié du tableau.

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
Gabriele Petrioli

Vous devez passer une fonction predicate à .remove méthode de lodash.

var final = _.remove(a, obj => removeItem.indexOf(obj.id) > -1);

en utilisant la méthode indexOf.

La méthode indexOf () renvoie le premier index auquel un élément donné peut être trouvé dans le tableau, ou -1 s'il n'est pas présent.

Vous pouvez le faire en utilisant native javascript en utilisant la méthode filter qui accepte comme paramètre une fonction callback.

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

Mais la méthode filter crée simplement un nouveau tableau en appliquant une fonction callback.

De documentation:

La méthode filter () crée un nouveau tableau avec tous les éléments qui réussissent le test implémenté par la fonction fournie.

Si vous souhaitez modifier le tableau d'origine, utilisez la méthode 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);
4