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

152voto

Klaster_1 Points 3386

Vous pouvez utiliser Méthode du filtre en réseau .

Le code ressemblerait à ceci :

ar = [1, 2, 3, 4];
ar = ar.filter(item => !(item > 3));
console.log(ar) // [1, 2, 3]

60voto

pickypg Points 8948

Vous pourriez ajouter votre propre méthode à Array qui fait quelque chose de similaire, si filter ne fonctionne pas pour vous.

Array.prototype.removeIf = function(callback) {
    var i = 0;
    while (i < this.length) {
        if (callback(this[i], i)) {
            this.splice(i, 1);
        }
        else {
            ++i;
        }
    }
};

Pour moi, c'est l'une des caractéristiques les plus cool de JavaScript. Ian a indiqué un moyen plus efficace de faire la même chose. Sachant que c'est du JavaScript, chaque détail compte :

Array.prototype.removeIf = function(callback) {
    var i = this.length;
    while (i--) {
        if (callback(this[i], i)) {
            this.splice(i, 1);
        }
    }
};

Cela évite d'avoir à se préoccuper de la mise à jour. length ou d'attraper l'élément suivant, en allant vers la gauche plutôt que vers la droite.

44voto

Blender Points 114729

Vous pouvez utiliser Array.filter() qui fait le contraire :

ar.filter(function(item, idx) {
    return item <= 3;
});

7voto

Satoshi Suzuki Points 71

Vous pouvez utiliser lodash.remove

var array = [1, 2, 3, 4];
var evens = _.remove(array, function(n) {
  return n % 2 == 0;
});

console.log(array);
// => [1, 3]

console.log(evens);
// => [2, 4]

7voto

jabko87 Points 1404

Faites-en une phrase unique avec une fonction de flèche :

ar = ar.filter(i => i > 3);

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