JavaScript hat zwei recht leistungsstarke und beliebte Funktionen unter Entwicklern: Split and Mel. Diese beiden Funktionen können sowohl String- als auch Array -Typen austauschen, dh Arrays können in Saiten serialisiert werden und umgekehrt. Wir können diese beiden Funktionen vollständig spielen. Erkunden wir hier einige interessante Anwendungen. Lassen Sie uns zunächst diese beiden Funktionen vorstellen:
String.Prototype.split (Separator, Grenze)
Der Separator teilt die Zeichenfolge in ein Array, und die optionale Parametergrenze definiert die maximale Länge des erzeugten Arrays.
"85 @@ 86 @@ 53" .split ('@@'); // ['85', '86', '53']; "Banana" .Split (); //["Banane"]; // (danke Peter (-:) Präsident, Senat, House ".split (',', 2); // [" Präsident "," Senat "] Array.Prototype.Join (Trennzeichen)Das optionale Parameterabscheider wandelt das Array in eine Zeichenfolge um. Wenn das Trennzeichen nicht bereitgestellt wird, wird das Komma als Parameterwert verwendet (genau wie die ToString -Funktion des Arrays).
["Slugs", "Snails", "Puppy Dog's Tails"]. Join ('und'); // "Schnecken und Schnecken und Schwänze des Welpenhundes" ['Giants', 4, 'Rangers', 1] .Join (''); // "Giants 4 Rangers 1" [1962.1989.2002.2010] .Join ();Hier sind einige der Anwendungen:
austauschen
Diese einfache Funktion ist nicht wie die native Ersatzfunktion, sondern kann als globales Substring ersetzt werden, ohne reguläre Ausdrücke zu verwenden.
String.Prototype.ReplaceAll = Funktion (finde, ersetzen Sie mit) {return this.split (find) .join (ersetzen Sie mit); } "Der Mann und der Plan" .Replaceall ('The', 'a'); // "ein Mann und ein Plan"Für kleine Saiten ist es etwas schwächer als native Funktionen, die durch ein einzelnes Zeichen ersetzt werden (hier bezieht sich auf zwei zusätzliche Funktionen eines regulären Ausdrucks), aber unter Mozilla läuft diese Verwendungsfunktion, wenn das Zeichen 2 oder 3 Zeichen überschreitet, schneller als der reguläre Ausdruck.
Vorkommen
Diese Funktion kann die Anzahl der Substrings übereinstimmen. Darüber hinaus ist diese Art von Funktion sehr direkt und erfordert keine Regelmäßigkeit.
String.Prototype.occurences = Funktion (find, MatchCase) {var text = this; MatchCase || (find = find.tolowerCase (), text = text.tolowerCase ()); return text.split (find) .Length-1; } document.body.innerhtml.occurences ("div"); // Google Homepage hat 114Document.body.innerhtml.occurcurces ("/div"); // Google Homepage hat 57 "England engagiert seine Ingenieure". // 2repeatDiese Funktion wird von prototype.js ausgeliehen:
String.Prototype.repeat = function (Times) {Neuarray zurückgeben (Times+1) .Join (this); } "go" .Repeat (3) + "Giants!"; // "Geh go go Giants!"Die Schönheit daran liegt in der Verwendung der Join -Funktion. Der Fokus liegt auf diesem Parameterwert des Trennzeichens, und dann enthält dieses grundlegende Array nur einige undefinierte Wertwerte. Um dies klarer zu veranschaulichen, sollten wir das obige Beispiel nachstellen:
[undefiniert, undefiniert, undefiniert, undefiniert] .Join ("Go") + "RiesenDenken Sie daran, dass jedes Array -Element vor dem Verbinden in eine Zeichenfolge konvertiert wird (hier ist eine leere Zeichenfolge). Die Anwendung dieser Wiederholungsfunktion ist eine der wenigen nicht minderwertigen Anwendungen, die Arrays durch Array -Literale definieren.
Verwenden Sie den Grenzparameter
Ich verwende selten die optionalen Parameter der Split -Funktion. Hier ist ein Beispiel, das diese Grenze verwendet:
var getdomain = function (url) {return return url.split ('/', 3) .join ('/');} GetDomain ("http://www.aneventapart.com/2010/seattle/slides/"); // "http: //www.anev entapart.com "GetDomain (" https://addons.mozilla.org/en-us/firefox/bookmarks/ "); //" https://addons.mozilla.org "Numerische Mitglieder ändern
Wenn wir Stammgäste mischen, können sich zusammenschließen und teilen können die Array -Mitglieder problemlos verändern. Diese Funktion ist jedoch nicht so schwierig wie imaginär. Seine Hauptfunktion besteht darin, die vor jedem Mitglied des angegebene Zeichenfolge zu entfernen.
var deadMembers = function (arr, removestern) {var regex = regexp ("[,]?" + removestern); return arr.join (). Split (Regex) .Slice (1);} // Erstellen Sie ein Array, das nur den numerischen Teil der Flugnummernbee -Mägern enthält (["Ba015", "Ba129", "Ba130"]; // ["015", "129", "130".Leider schlägt diese Funktion in IE fehl, weil sie das erste leere Mitglied fälschlicherweise von Split entfernen. Korrigieren wir nun diese Funktion:
var deadMembers = function (arr, removestern) {var regex = regexp ("[,]?" + removestern); var result = arr.join (). split (regex); Rückgabeergebnis [0] && Ergebnis || Ergebnis.Slice (1); // dh Problemumgehung}Warum verwenden wir diese Technik anstelle der Kartenfunktion von Array in EmaScript 5?
["Ba015", "Ba129", "Ba130"]. MAP (Funktion (e) {return e.Replace ('ba', '')}); // ["015", "129", "130"]Bei machbarer Verwendung verwende ich normalerweise die native Kartenfunktion (nicht im Folgenden verfügbar, dh <9). Das folgende Beispiel wird nur als Lernwerkzeug verwendet, aber es ist erwähnenswert, dass die aufrufende Syntax von Join und Split prägnanter und direkter ist. Am interessantesten ist es auch sehr effizient, insbesondere für kleine Arrays, was bei FF und Safari effizienter ist. Für große Arrays sind Kartenfunktionen besser geeignet. (In allen Browsern) werden weniger Funktionsaufrufe zum Verbinden und Split -Funktionen geben.
// Test 1-Verwenden Sie Join/Splitvar arr = [], x = 1000; while (x--) {arr.push ("ba" + x);} var enthuaMembers = Funktion (arr, regex) {return arr.join (). Split (Regex) .Slice (1);} var regex = regex = yregexp ("[[," + " +". 1000; while (y--) {Enthaube (arr, regex);}; y = 1000; while (y--) {arr.map (Funktion (e) {return e.Replace ('ba', '')});}+neues Datum-Timer; // ff 3.6 2051ms // cr 7 732ms //Musteranpassung
Arrays müssen ständig Musteranpassungen durchführen, Strings jedoch nicht. Regelmäßige Ausdrücke können in Saiten verwendet werden, jedoch nicht in Arrays. Die Kraft, Arrays in Zeichenfolgen für das Musteranpassung umzuwandeln, liegt weit über den Rahmen dieses Artikels hinaus. Schauen wir uns eine einfache Anwendung davon an.
Angenommen, die Rennergebnisse des Rennens müssen auf das Array gerettet werden. Ziel ist es, die Teilnehmer und ihre Aufnahmezeit abwechselnd in einem Array zu platzieren. Wir können Join und reguläre Ausdrücke verwenden, um zu überprüfen, ob dieses Speichermuster korrekt ist. Der folgende Code besteht darin, die verpasste Datensatzzeit zu finden, indem Sie nach zwei aufeinanderfolgenden Namen suchen.
var resultes = ['sunil', '23: 09 ',' bob ', '22: 09', 'carlos', 'Mary', '22: 59 ']; var baddata = results.join (', '). Match (/[a-za-z]+, [a-za-z]+/g); baddata; // ["Carlos, Mary"]