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.

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


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!==''});

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

3
arr = arr.filter(v => v);

wie zurückgegeben vwird Implizität in Wahrheit umgewandelt


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];


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

.replace(" ","").split(" ")"Ersetzen Sie alle Leerzeichen durch nichts und versuchen Sie dann, sie an jedem Leerzeichen aufzuteilen"
— Isaac

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.