web-dev-qa-db-ger.com

String split gibt ein Array mit zwei statt einem Element zurück

Ich verstehe dieses Verhalten nicht:

var string = 'a,b,c,d,e:10.';
var array = string.split ('.');

Ich erwarte das:

console.log (array); // ['a,b,c,d,e:10']
console.log (array.length); // 1

aber ich bekomme das:

console.log (array); // ['a,b,c,d,e:10', '']
console.log (array.length); // 2

Warum werden zwei Elemente statt eines zurückgegeben? Wie funktioniert split?

Gibt es eine andere Möglichkeit, dies zu tun?

30
Wilk

Dies ist das korrekte und erwartete Verhalten. Da Sie das Trennzeichen in die Zeichenfolge eingefügt haben, übernimmt die Split-Funktion (vereinfacht) den Teil links vom Trennzeichen ("a, b, c, d, e: 10") als erstes Element und den Teil zu der Rest des Trennzeichens (eine leere Zeichenfolge) als zweites Element.

Wenn Sie wirklich wissen möchten, wie split () funktioniert, besuchen Sie die Seiten 148 und 149 der ECMA-Spezifikation (ECMA 262) unter http://www.ecma-international.org/publications/files/ECMA- ST/Ecma-262.pdf

17
Ingo

Sie können einen Filter hinzufügen, um die leere Zeichenfolge auszuschließen.

var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(function(el) {return el.length != 0});
71
xdazz

Eine etwas einfachere Version von @xdazz version zum Ausschließen leerer Zeichenketten (mit ES6 Pfeilfunktion ):

var array = string.split('.').filter(x => x);
17
marmor

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split

kürzen Sie zuerst die nachlaufende Periode

'a,b,c,d,e:10.'.replace(/\.$/g,''); // gives "a,b,c,d,e:10"

dann teilen Sie die Zeichenfolge

var array = 'a,b,c,d,e:10.'.replace(/\.$/g,'').split('.');

console.log (array.length); // 1

2
chim

Verwenden Sie String.split () - Methode mit der Array.filter () -Methode.

var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(item => item);

console.log(array); // [a,b,c,d,e:10]
console.log (array.length); // 1

2
Rohit Jindal

Dies liegt daran, dass die Zeichenfolge mit dem Zeichen . endet - das zweite Element des Arrays ist leer.

Wenn die Zeichenfolge . überhaupt nicht enthält, haben Sie das gewünschte Element-Array.

Die split()-Methode funktioniert folgendermaßen, soweit ich es mit einfachen Worten erklären kann:

  1. Suchen Sie nach der angegebenen Zeichenfolge, um sie in der angegebenen Zeichenfolge aufzuteilen. Wenn nicht gefunden, geben Sie ein Elementfeld mit der gesamten Zeichenfolge zurück.
  2. Wenn gefunden, iterieren Sie die angegebene Zeichenfolge und nehmen Sie die Zeichen zwischen den beiden Vorkommen der Zeichenfolge auf, um sie zu trennen.
  3. Wenn die angegebene Zeichenfolge mit der Zeichenfolge beginnt, durch die die Zeichenfolge geteilt werden soll, ist das erste Element des Ergebnis-Arrays leer.
  4. Falls die angegebene Zeichenfolge mit der Zeichenfolge endet, durch die die Zeichenfolge geteilt werden soll, ist das letzte Element des Ergebnis-Arrays leer.

Es ist mehr technisch erklärt hier , es ist für alle Browser ziemlich gleich.

1
Shadow Wizard

so; [String.prototype] split(separator, limit) Rückkehr zum normalen Grenzparameter ist leer. 

"".split(",") // [""]

"a,b,c.".split(".", 1) // ["a,b,c"]

Wenn Sie dies auch ohne Limit-Parameter nicht hätten tun können. Ich denke, das ist eine normale Operation ...

1
Yaşar İÇLİ

Gemäß MDN-Webdokumente :

Hinweis: Wenn die Zeichenfolge leer ist, gibt split () ein Array mit einer leeren Zeichenfolge anstelle eines leeren Arrays zurück. Wenn die Zeichenfolge und das Trennzeichen beide leere Zeichenfolgen sind, wird ein leeres Array zurückgegeben.

const myString = '';
const splits = myString.split();

console.log(splits); 

// ↪ [""]
0
Ruslan Korkin

Nun, split macht das, wozu es gemacht wurde, es spaltet Ihre Saite. Nur dass der zweite Teil der Trennung leer ist.

0
w01k3

Weil Ihre Saite aus 2 Teilen besteht:

1: a, b, c, d, e: 10

2: leer

Wenn Sie es ohne Punkt am Ende versuchen:

var string = 'a,b,c:10';
var array = string.split ('.');

ausgabe ist:

["a,b,c:10"]
0
MyBoon

Sie haben eine Zeichenfolge mit einem "." Wenn Sie string.split ('.') verwenden, erhalten Sie ein Array mit dem ersten Element mit dem String-Inhalt vor "." Zeichen und das zweite Element mit dem Inhalt der Zeichenfolge nach dem "." - was in diesem Fall eine leere Zeichenfolge ist. 

Dieses Verhalten ist also normal. Was wollten Sie mit diesem string.split erreichen?

0
Miljan Vranic