web-dev-qa-db-ja.com

文字列分割は、1つではなく2つの要素を持つ配列を返します

私はこの動作を理解していません:

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

私はこれを期待しています:

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

しかし、私はこれを取得します:

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

なぜ1つではなく2つの要素が返されるのですか? splitはどのように機能しますか?

これを行う別の方法はありますか?

36
Wilk

これは正しい予想される動作です。文字列に区切り記号を含めた場合、分割関数(簡略化)は、区切り記号の左側の部分( "a、b、c、d、e:10")を最初の要素として使用し、残りの区切り文字(空の文字列)を2番目の要素として。

Split()の仕組みに本当に興味がある場合は、ECMA仕様(ECMA 262)の148ページと149ページを http://www.ecma-international.org/publications/files/で確認できます。 ECMA-ST/Ecma-262.pdf

20
Ingo

空の文字列を除外するフィルターを追加できます。

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

空の文字列を除外するための @ xdazz version の少し簡単なバージョン( ES6矢印関数 を使用):

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

String.split() メソッドを Array.filter( ) メソッド。

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
6
Rohit Jindal

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

最初に末尾のピリオドをトリミングします

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

次に、文字列を分割します

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

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

2
chim

これは、文字列が_._文字で終わるためです-配列の2番目の項目は空です。

文字列に_._がまったく含まれない場合、必要な1つのアイテム配列があります。

split()メソッドは、簡単な言葉で説明できる限り、次のように機能します。

  1. 特定の文字列で分割する特定の文字列を探します。見つからない場合は、文字列全体を含む1つのアイテム配列を返します。
  2. 見つかった場合は、指定された文字列を反復処理して、分割する文字列が2回出現する間の文字を取得します。
  3. 指定された文字列が分割する文字列で始まる場合、結果の配列の最初の項目は空になります。
  4. 指定された文字列が分割する文字列で終わる場合、結果配列の最後の項目は空になります。

より技術的に説明されています こちら 、すべてのブラウザでほぼ同じです。

1
Shadow Wizard

そう; [String.prototype]split(separator, limit)通常の制限パラメータへの戻り値は空です。

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

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

制限パラメータなしでこれを行うことができなかった場合。これは通常の操作だと思います...

1
Yaşar İÇLİ

MDN web docs によると:

注:文字列が空の場合、split()は空の配列ではなく、1つの空の文字列を含む配列を返します。文字列とセパレータが両方とも空の文字列の場合、空の配列が返されます。

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

console.log(splits); 

// ↪ [""]
0
Ruslan Korkin

さて、splitはそれが行われるようにし、文字列を分割します。分割の2番目の部分が空であることだけです。

0
w01k3

文字列は2つの部分で構成されているため:

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

2:空

最後にドットなしで試してみると:

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

出力は次のとおりです。

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

1つの「。」を含む文字列がありますその中で、string.split( '。')を使用すると、「。」の前に文字列の内容を持つ最初の要素を含む配列を受け取ります。文字と、「。」の後の文字列の内容を持つ2番目の要素-この場合は空の文字列です。

したがって、この動作は正常です。このstring.splitを使用して何を達成したいですか?

0
Miljan Vranic