カンマを含む文字列を配列に変換します


365

文字列をJavaScript配列に変換するにはどうすればよいですか?

コードを見てください:

var string = "0,1";
var array = [string];
alert(array[0]);

この場合、alertポップアップし0,1ます。配列の場合はをポップアップし、呼び出された0場合alert(array[1]);はをポップアップし1ます。

そのような文字列をJavaScript配列に変換する機会はありますか?


これが必要な理由にもよりますが、文字列と配列はすでに非常によく似ていstring[0] === '0'ます(つまり、質問では)。ほとんどの場合、文字列を文字の配列として扱い、配列メソッドを使用できます。
Paul S.

@PaulS .: IE8以下では失敗します。
私はレイジーが嫌いだ


すべてのタイプの文字列をサポートするためのベストプラクティス。こちらをご覧くださいstackoverflow.com/a/32657055/2632619
Andi AR

回答:


667

そのような単純な配列メンバーの場合は、を使用できますJSON.parse

var array = JSON.parse("[" + string + "]");

これにより、数値の配列が得られます。

[0, 1]

を使用.split()すると、文字列の配列になります。

["0", "1"]

JSON.parseサポートされているデータ型に制限されることに注意してください。undefinedまたは関数のような値が必要な場合はeval()、またはJavaScriptパーサーを使用する必要があります。


を使用し.split()たいが、数値の配列も必要な場合は、を使用できますArray.prototype.map。ただし、IE8以下の場合は、shimを使用するか、従来のループを作成する必要があります。

var array = string.split(",").map(Number);

4
JSON.parse();IE6、IE7では利用できないことにも注意してください。この場合、私String.split(',');はもっと簡単だと思います。
scunliffe

@scunliffe:確かに、shimが必要になるか、jQueryのアプローチを使ってshimすることができますvar array = (new Function("return [" + string + "];"))().split()数値が必要ない場合は使用しても問題ありません。そうでない場合は、結果をマッピングする必要があります。
私は

10
@Downvoter:私があなたがどのように間違っているかを示すことができるように、答えで何が悪いのかを説明するようにしてください。
私はレイジーが嫌いだ

@I Hate Lazyこれはオブジェクト文字列をサポートしていません。ここを参照してくださいstackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ(を使用してeval)注意してください。配列にクライアント側の入力からの値が含まれている場合、これは安全ではありません。
Wilt


86

これはES6で簡単に実現できます。

Array.from( 'string')を使用して文字列を配列に変換できます。

Array.from("01")

console.log

['0', '1']

それはまさにあなたが探しているものです。


1
これは素晴らしいです。を使用しJSON.parseているArray.fromので、コードをからに移動しましたES6。ありがとうRay Kim
Eshwar Prasad Yaddanapudi

console.log(typeof Data); // string ========== var myArray = Array.from(Data); ============ console.log(typeof myArray); //オブジェクトは 'from'プロパティまたはメソッドをサポートしていません==========なぜですか?
Janatbek Sharsheyev 2017

1
しかし、Array.from("0, 1, 233")戻ってきます。["0", ",", " ", "1", ",", " ", "2", "3", "3"][0, 1, 233]
Tina Chen

17
これは、すべての文字を配列要素として変換しています。ただし、配列要素になるのは、コンマ区切りの文字列だけです。したがって、有効な解決策ではありません。
Edison D'souza

1
このメソッドは、引数がSet文字列の場合にのみ信頼できます。
Josh Habdas

57

文字列がすでにリスト形式である場合は、JSON.parseを使用できます。

var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);

24

すべてのタイプの文字列を変換する

var array = (new Function("return [" + str+ "];")());



var string = "0,1";

var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';

var stringArray = (new Function("return [" + string+ "];")());

var objectStringArray = (new Function("return [" + objectstring+ "];")());

JSFiddle https://jsfiddle.net/7ne9L4Lj/1/

コンソールの結果

ここに画像の説明を入力してください

一部のプラクティスはオブジェクト文字列をサポートしていません

- JSON.parse("[" + string + "]"); // throw error

 - string.split(",") 
// unexpected result 
   ["{Name:"Tshirt"", " CatGroupName:"Clothes"", " Gender:"male-female"}", "      {Name:"Dress"", " CatGroupName:"Clothes"", " Gender:"female"}", " {Name:"Belt"",    " CatGroupName:"Leather"", " Gender:"child"}"]

素晴らしい機能私も使用していますが、残念ながら文字列や記号には使用できません。
sqp_125 2017

1
@ sqp_125 0を試してみてください。
Unreality 2017年

19

そのような単純な配列メンバーの場合、JSON.parseを使用できます。

var listValues = "[{\"ComplianceTaskID\":75305,\"RequirementTypeID\":4,\"MissedRequirement\":\"Initial Photo Upload NRP\",\"TimeOverdueInMinutes\":null}]";

var array = JSON.parse("[" + listValues + "]");

これにより、数値の配列が得られます。

今、あなたの変数値はarray.length = 1のようなものです

値出力

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes


16

ES6を使用する別のオプションは、Spread構文を使用することです。

var convertedArray = [..."01234"];

var stringToConvert = "012";
var convertedArray  = [...stringToConvert];
console.log(convertedArray);


2
驚くばかり!Array.from回答と一緒に、それらはES6ソリューションの唯一の回答になるはずです。
Artyom Pranovich 2017年

10

次のように、組み込みのmap関数を無名関数とともに使用します。

string.split(',').map(function(n) {return Number(n);});

[編集]使い方は次のとおりです

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );

1
これが最も一般的に当てはまる答えです。JSONを任意の区切り文字(タブ、スペースなど)に使用することはできません
javadba

これは、配列値が、内部にコンマが含まれる可能性のある文字列値である場合は機能しません。次に例を示します"123, 'a string with a , comma', 456"。より複雑な正規表現を使用して、このようなケースを正しく処理できます(たとえば、ここで提案されているようなもの)。
Wilt

@Wiltうまくいかないでしょうが、そうです、正規表現を使用して修正できます
Dan Mantyla、

1
私はあなたの答えを批判するつもりはありませんでしたが、私はあなたの解決策を使ってこの問題に自分で遭遇したのでこれを書きました。同様の問題が発生している可能性のある他の人にコメントを残すことを考えた
ウィルト

3

以下の「自分で試す」の例

定義と使用法split()メソッドは、文字列を部分文字列の配列に分割し、新しい配列を返すために使用されます。

ヒント:空の文字列( "")を区切り記号として使用すると、文字列は各文字間で分割されます。

注:split()メソッドは元の文字列を変更しません。

var res = str.split(",");

3

JavaScript スプレッド構文を使用して、文字列を配列に変換できます。以下のソリューションでは、コンマを削除してから文字列を配列に変換します。

var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])

2

JavaScriptでカンマ区切りの文字列を配列に変換する方法は?

var string = 'hello, world, test, test2, rummy, words';
var arr = string.split(', '); // split string on comma space
console.log( arr );

//Output
["hello", "world", "test", "test2", "rummy", "words"]

以下の方法を使用してJavaScriptで文字列を配列に変換するその他の例:

  1. Split()–区切り記号なし:
  2. Split()–空の文字列セパレータ:
  3. Split()–開始/終了のセパレーター:
  4. 正規表現セパレータ:
  5. 括弧のキャプチャ:
  6. 制限引数付きのSplit()

    このリンクをチェックしてください==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/



0

Split( "、")は、コンマを含む文字列を文字列配列に変換できます。これが私のコードスニペットです。

    var input ='Hybrid App, Phone-Gap, Apache Cordova, HTML5, JavaScript, BootStrap, JQuery, CSS3, Android Wear API'
    var output = input.split(",");
    console.log(output);

[「ハイブリッドアプリ」、「Phone-Gap」、「Apache Cordova」、「HTML5」、「JavaScript」、「BootStrap」、「JQuery」、「CSS3」、「Android Wear API」]


0

var i = "[{a:1,b:2}]",
    j = i.replace(/([a-zA-Z0-9]+?):/g, '"$1":').replace(/'/g,'"'),
    k = JSON.parse(j);

console.log(k)

// =>正規表現を宣言する

[a-zA-Z0-9] =>すべてのaz、AZ、0-9に一致

(): =>一致したすべての要素をグループ化

$ 1 =>置換文字列は、正規表現の最初の一致グループを指します。

g =>グローバルフラグ


0

使用例Array.filter

var str = 'a,b,hi,ma,n,yu';

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');

-1

このように,コンマとsplit('')このような文字列を置き換えて['0', '1']、結果をにします。さらに、結果をparseInt()にラップして、要素を整数型に変換できます。

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.