web-dev-qa-db-fra.com

Supprimer les chaînes vides du tableau tout en conservant l'enregistrement Without Loop?

Cette question a été posée ici: Supprimer les chaînes vides du tableau tout en conservant l'enregistrement des index avec des chaînes non vides

Si vous remarquez que @Baz l'a donné,

"I", "am", "", "still", "here", "", "man"

"et à partir de cela, je souhaite produire les deux tableaux suivants:"

"I", "am", "still", "here", "man"

Toutes les réponses à cette question faisaient référence à une forme de bouclage.

Ma question: Existe-t-il une possibilité de supprimer tous indexes avec emptystring sans boucle? ... existe-t-il une alternative en dehors de l'itération du tableau?

Peut-être que regex ou jQuery dont nous ne sommes pas au courant?

Toutes les réponses ou suggestions sont très appréciées.

84
Universal Grasp
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]

filter documentation


// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]

documentation des fonctions de flèche

296
Isaac
var newArray = oldArray.filter(function(v){return v!==''});
18
haithamahmed

VEUILLEZ NOTER :) La documentation dit:

filter est une extension JavaScript de la norme ECMA-262; en tant que tel il peut ne pas être présent dans d'autres implémentations de la norme. Vous pouvez contourner ce problème en insérant le code suivant au début de vos scripts, ce qui permet d'utiliser un filtre dans les implémentations ECMA-262 qui ne le prend pas en charge de manière native. Cet algorithme est exactement celui spécifié dans ECMA-262, 5ème édition, en supposant que fn.call évalue la valeur d'origine de Function.prototype.call et que Array.prototype.Push a sa valeur d'origine.

Donc, pour éviter un peu de chagrin d'amour, vous devrez peut-être ajouter ce code à votre script Au début.

if (!Array.prototype.filter) {
  Array.prototype.filter = function (fn, context) {
    var i,
        value,
        result = [],
        length;
        if (!this || typeof fn !== 'function' || (fn instanceof RegExp)) {
          throw new TypeError();
        }
        length = this.length;
        for (i = 0; i < length; i++) {
          if (this.hasOwnProperty(i)) {
            value = this[i];
            if (fn.call(context, value, i, this)) {
              result.Push(value);
            }
          }
        }
    return result;
  };
}
8
ErickBest
arr = arr.filter(v => v);

comme retourné v est converti implicitement en vérité

3
haind

Si vous utilisez jQuery, grep peut être utile:


var arr = [ a, b, c, , e, f, , g, h ];

arr = jQuery.grep(arr, function(n){ return (n); });

arr est maintenant [ a, b, c, d, e, f, g];

2
sansid1983

c'est-à-dire que nous devons utiliser plusieurs adresses électroniques séparées par une virgule, des espaces ou une nouvelle ligne, comme indiqué ci-dessous.

    var emails = EmailText.replace(","," ").replace("\n"," ").replace(" ","").split(" ");
    for(var i in emails)
        emails[i] = emails[i].replace(/(\r\n|\n|\r)/gm,"");

    emails.filter(Boolean);
    console.log(emails);
0
Atif Hussain