私はこの動作を理解していません:
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
はどのように機能しますか?
これを行う別の方法はありますか?
これは正しい予想される動作です。文字列に区切り記号を含めた場合、分割関数(簡略化)は、区切り記号の左側の部分( "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
空の文字列を除外するフィルターを追加できます。
var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(function(el) {return el.length != 0});
空の文字列を除外するための @ xdazz version の少し簡単なバージョン( ES6矢印関数 を使用):
var array = string.split('.').filter(x => x);
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
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番目の項目は空です。
文字列に_.
_がまったく含まれない場合、必要な1つのアイテム配列があります。
split()
メソッドは、簡単な言葉で説明できる限り、次のように機能します。
より技術的に説明されています こちら 、すべてのブラウザでほぼ同じです。
そう; [String.prototype]split(separator, limit)
通常の制限パラメータへの戻り値は空です。
"".split(",") // [""]
"a,b,c.".split(".", 1) // ["a,b,c"]
制限パラメータなしでこれを行うことができなかった場合。これは通常の操作だと思います...
MDN web docs によると:
注:文字列が空の場合、split()は空の配列ではなく、1つの空の文字列を含む配列を返します。文字列とセパレータが両方とも空の文字列の場合、空の配列が返されます。
const myString = '';
const splits = myString.split();
console.log(splits);
// ↪ [""]
さて、splitはそれが行われるようにし、文字列を分割します。分割の2番目の部分が空であることだけです。
文字列は2つの部分で構成されているため:
1:a、b、c、d、e:10
2:空
最後にドットなしで試してみると:
var string = 'a,b,c:10';
var array = string.split ('.');
出力は次のとおりです。
["a,b,c:10"]
1つの「。」を含む文字列がありますその中で、string.split( '。')を使用すると、「。」の前に文字列の内容を持つ最初の要素を含む配列を受け取ります。文字と、「。」の後の文字列の内容を持つ2番目の要素-この場合は空の文字列です。
したがって、この動作は正常です。このstring.splitを使用して何を達成したいですか?