Leere Zeichenfolgen aus dem Array entfernen, während Aufzeichnung ohne Schleife?

90

Diese Frage wurde hier gestellt: Entfernen Sie leere Zeichenfolgen aus dem Array, während Sie Indizes mit nicht leeren Zeichenfolgen aufzeichnen

Wenn Sie das gegebene bemerken würden, wie @Baz es auslegte;

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

"und daraus möchte ich die folgenden zwei Arrays erzeugen:"

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

Alle Antworten auf diese Frage bezogen sich auf eine Form der Schleife.

Meine Frage: Gibt es eine Möglichkeit , alle indexes ohne Schleifen zu entfernen empty string ?... gibt es eine andere Alternative als das Iterieren des Arrays?

Kann einige regexoder einige seinjQuery , die wir nicht kennen?

Alle Antworten oder Vorschläge werden sehr geschätzt.

Universalgriff
quelle

Antworten:

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

filter Dokumentation


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

Dokumentation der Pfeilfunktionen

Isaac
quelle
3
Ich weiß genau, wie du dich fühlst, ich habe es vor Monaten benutzt, behebt so viele kleine Probleme
Isaac
14
@DiegoPlentz Leute, die noch IE8 ausführen, werden viel mehr Probleme haben, als nur Leerzeichen in einem Array zu entfernen ... Ich denke heutzutage kaum daran, diesen Browser zu unterstützen
Isaac
Dies ist die nächste, array.filter(!!)die wir derzeit bekommen können :)
james_womack
2
Alle Gutschriften für diese Antwort sollten an stackoverflow.com/questions/16701319/…
Isaac
Eine Erklärung dazu Booleanwäre schön.
Robsch
18
var newArray = oldArray.filter(function(v){return v!==''});
haithamahmed
quelle
Einfach die beste Antwort. Tut genau das, was die Frage stellt. Entfernt keine Nullwerte.
Bryan
9

BITTE BEACHTEN SIE: Die Dokumentation sagt:

filterist eine JavaScript-Erweiterung des ECMA-262-Standards; als solches ist es möglicherweise in anderen Implementierungen des Standards nicht vorhanden . Sie können dies umgehen, indem Sie den folgenden Code am Anfang Ihrer Skripte einfügen und die Verwendung von Filtern in ECMA-262-Implementierungen ermöglichen, die ihn nicht nativ unterstützen. Dieser Algorithmus ist genau der in ECMA-262, 5. Ausgabe, angegebene, vorausgesetzt, fn.call ergibt den ursprünglichen Wert von Function.prototype.call und Array.prototype.push hat seinen ursprünglichen Wert.

Um Herzschmerz zu vermeiden, müssen Sie diesen Code möglicherweise zu Beginn zu Ihrem Skript hinzufügen .

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;
  };
}
ErickBest
quelle
3
arr = arr.filter(v => v);

wie zurückgegeben vwird Implizität in Wahrheit umgewandelt

haind
quelle
2

Wenn Sie jQuery verwenden, kann grep hilfreich sein:


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

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

arr ist jetzt [ a, b, c, d, e, f, g];

sansid1983
quelle
2
jquery scheint eine Menge Sperrigkeit für eine niedere Aufgabe zu sein
Isaac
0

Das heißt, wir müssen mehrere E-Mail-Adressen verwenden, die durch Komma, Leerzeichen oder Zeilenumbruch getrennt sind (siehe unten).

    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);
Atif Hussain
quelle
.replace(" ","").split(" ")"Ersetzen Sie alle Leerzeichen durch nichts und versuchen Sie dann, sie an jedem Leerzeichen aufzuteilen"
Isaac