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 index
es avec empty
string
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.
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]
var newArray = oldArray.filter(function(v){return v!==''});
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;
};
}
arr = arr.filter(v => v);
comme retourné v
est converti implicitement en vérité
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];
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);