106 votes

javascript - suppression d'un élément de tableau sur condition

Je me demandais comment implémenter une méthode en javascript qui supprime tous les éléments d'un tableau qui remplissent une certaine condition. (De préférence sans utiliser jQuery)

Ex.

ar = [ 1, 2, 3, 4 ];
ar.removeIf( function(item, idx) {
    return item > 3;
});

La méthode ci-dessus passe en revue chaque élément du tableau et supprime tous les éléments qui return true pour la condition (dans l'exemple, poste > 3).

Je débute en javascript et je me demandais si quelqu'un connaissait un moyen court et efficace de le faire.

-- mise à jour --

Ce serait également formidable si la condition pouvait également fonctionner sur les propriétés des objets.

Ex.

ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
ar.removeIf( function(item, idx) {
    return item.str == "c";
});

Où l'article serait retiré si item.str == "c"

-- actualisation2 --

Ce serait bien si les conditions d'indexation pouvaient également fonctionner.

Ex.

ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
ar.removeIf( function(item, idx) {
    return idx == 2;
});

3voto

PSL Points 53773

J'adore ce genre de questions et une version différente de moi aussi... :)

Array.prototype.removeIf = function(expression) {
   var res = [];
    for(var idx=0; idx<this.length; idx++)
    {
      var currentItem = this[idx];
        if(!expression(currentItem))
        {
            res.push(currentItem);
        }
    }
    return res;
}

ar = [ 1, 2, 3, 4 ];
var result = ar.removeIf(expCallBack);

console.log(result);
function expCallBack(item)
{
    return item > 3;
}

3voto

Écrire simplement l'exemple suivant si la condition pouvait aussi fonctionner sur les propriétés des objets

var ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
var newArray = [];
for (var i = 0, len = ar.length; i<len; i++) {
        if (ar[i].str == "b") 
        {newArray.push(ar[i]);};
 };
console.log(newArray);

Voir l'exemple Exemple en direct

2voto

oriadam Points 3663

Si vous avez besoin de supprimer exactement un élément, et que vous êtes sûr que cet élément existe, vous pouvez utiliser cette ligne unique :

ar.splice(ar.findIndex(el => el.id === ID_TO_REMOVE), 1);

// or with custom method:
let ar = [ {id:1, str:"a"}, {id:2, str:"b"}, {id:3, str:"c"}, {id:4,str:"d"} ];
ar.removeById = id => ar.splice(ar.findIndex(el => el.id === id), 1);
ar.removeById(ID_TO_REMOVE);

http://jsfiddle.net/oriadam/72kgprw5/

ES6 uniquement

2voto

Frank Waalkens Points 191

Ma solution pour un tableau de chiffres serait la suivante :

ar.filter(item => item < 4);

0voto

Simon Points 793

Pour la suppression sur place, ma solution est la suivante

ar.filter(item => !(item > 3))
  .forEach(obsoleteItem => ar.splice(ar.indexOf(obsoleteItem), 1));

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