189 votes

supprimer des objets du tableau par propriété d'objet

var listToDelete = ['abc', 'efg'];

var arrayOfObjects = [{id:'abc',name:'oh'}, // delete me
                      {id:'efg',name:'em'}, // delete me
                      {id:'hij',name:'ge'}] // all that should remain

Comment supprimer un objet du tableau en faisant correspondre la propriété de l'objet ?

Uniquement du JavaScript natif, s'il vous plaît.

J'ai des difficultés à utiliser l'épissage car la longueur diminue avec chaque délétion. L'utilisation du clone et de l'épissage sur l'index original vous laisse toujours avec le problème de la diminution de la longueur.

1voto

Vous pouvez utiliser filter . Cette méthode retourne toujours l'élément si la condition est vraie. Ainsi, si vous voulez supprimer un élément par son identifiant, vous devez conserver tous les éléments qui ne correspondent pas à l'identifiant donné. Voici un exemple :

arrayOfObjects = arrayOfObjects.filter(obj => obj.id != idToRemove)

0voto

Mehmet Kaplan Points 325

Si vous aimez les paramètres courts et auto-descriptifs ou si vous ne voulez pas utiliser la fonction splice et opter pour un filtre simple ou si vous êtes simplement une personne SQL comme moi :

function removeFromArrayOfHash(p_array_of_hash, p_key, p_value_to_remove){
    return p_array_of_hash.filter((l_cur_row) => {return l_cur_row[p_key] != p_value_to_remove});
}

Et un exemple d'utilisation :

l_test_arr = 
[
    {
         post_id: 1,
        post_content: "Hey I am the first hash with id 1"
    },
    {
        post_id: 2,
        post_content: "This is item 2"
    },
    {
        post_id: 1,
        post_content: "And I am the second hash with id 1"
    },
    {
        post_id: 3,
        post_content: "This is item 3"
    },
 ];

 l_test_arr = removeFromArrayOfHash(l_test_arr, "post_id", 2); // gives both of the post_id 1 hashes and the post_id 3
 l_test_arr = removeFromArrayOfHash(l_test_arr, "post_id", 1); // gives only post_id 3 (since 1 was removed in previous line)

0voto

user3437231 Points 232

avec filtre & indexOf

withLodash = _.filter(arrayOfObjects, (obj) => (listToDelete.indexOf(obj.id) === -1));
withoutLodash = arrayOfObjects.filter(obj => listToDelete.indexOf(obj.id) === -1);

avec filtre & inclus

withLodash = _.filter(arrayOfObjects, (obj) => (!listToDelete.includes(obj.id)))
withoutLodash = arrayOfObjects.filter(obj => !listToDelete.includes(obj.id));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X