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


720

配列に変換するコンマ区切りの文字列があるので、それをループ処理できます。

これを行うために組み込みのものはありますか?

たとえば、私はこの文字列を持っています

var str = "January,February,March,April,May,June,July,August,September,October,November,December";

これをコンマで区切って、配列に格納します。


7
これはjqueryを必要としないとコメントしたかったのですが、これはJavaScript自体の一部です。
Chris


4
重複について:これは、参照された質問より18か月前に行われます。どちらかと言えば、もう1つは
だまされやすいだけで

40
簡単です。string.split(',');
ブレーデンベスト

4
これが「ローカライズされすぎ」とマークされている理由がわかりません。文字列の分割が立ち上がる多くのことを、とある(私の答えはまだ何とか定期的にupvotesを取得しているという事実によって証明されるように)一般的にインターネットの世界的な聴衆に適用できます。他の4人がやって来て再開するのではないかと思いますが、それでもまだです。変だ。
マッチュ2013年

回答:


1218
var array = string.split(',');

MDNリファレンス。主に、limitパラメータの予期しない動作に役立つ。(ヒント:ではなくに"a,b,c".split(",", 2)出てきます。)["a", "b"]["a", "b,c"]


3
短くて甘く、JavaScriptにstringはJavaの豊富な機能が含まれていることがわかりますString
Michael Shopsin、

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

6
一方でsplitあなたが確信している場合は意志の作業罰金、あなたは内の要素を持っているarray、あなたは、サーバ/データベースからデータを期待している場合ので、あなたはトラブルに実行されます''.split(',')持っているlength === 1IE:''.split(',') === ['']
oportocala

@MichaelShopsinおよびAll、split関数はIE11で動作しない。これは、未定義またはnull参照のプロパティ「Split」を取得できないことを意味する。
DLV 2018

@DLVは新しい質問のように聞こえますが、おそらくStackOverflowでIEの質問を確認した後で確認する必要があります。
Michael Shopsin

130

1、2、3、4、5のような整数を目指している場合は注意してください。文字列を分割した後、配列の要素を文字列としてではなく整数として使用する場合は、それらを整数に変換することを検討してください。

var str = "1,2,3,4,5,6";
var temp = new Array();
// this will return an array with strings "1", "2", etc.
temp = str.split(",");

このようなループを追加する

for (a in temp ) {
    temp[a] = parseInt(temp[a], 10); // Explicitly include base as per Álvaro's comment
}

文字列ではなく整数を含む配列を返します。


47
明示的に設定しない限り、parseInt()はベースを推測しようとすることに注意してください。これにより、先行ゼロ("001,002,003...")を処理するときに予期しない結果が生じる可能性があります。と比較parseInt('010')してくださいparseInt('010', 10)
アルバロ・ゴンサレス

3
できれば、Alvaroのコメントをもっと賛成します。私はそのレッスンをしばらく前に学び、それを忘れたことはありません。
アントニースコット

2
+1この例はより明確であり、文字列は静的オブジェクトではなく、実際には文字列である変数であることを示しています。
K0D4 2013年

5
map関数は、1行に整数の解析を行うために使用することができますstr.split(',').map(parseInt)
ユート

1
これは最も効率的なソリューションではありません。Chrome 49での私の実験によると、JSON.parse( '[' + str + ']')はこのソリューションより40%高速です。
Yao

33

文字列には常にコンマを含めることができるため、Hmm分割は危険です。次の点に注意してください。

var myArr = "a,b,c,d,e,f,g,','";
result = myArr.split(',');

それで、どうやってそれを操作しますか?そして、あなたは結果が何になりたいですか?次の配列:

['a', 'b', 'c', 'd', 'e', 'f', 'g', '\'', '\''] or 
['a', 'b', 'c', 'd', 'e', 'f', 'g', ',']

コンマをエスケープしたとしても、問題があります。

これをすばやくいじった:

(function($) {
    $.extend({
        splitAttrString: function(theStr) {
            var attrs = [];

            var RefString = function(s) {
                this.value = s;
            };
            RefString.prototype.toString = function() {
                return this.value;
            };
            RefString.prototype.charAt = String.prototype.charAt;
            var data = new RefString(theStr);

            var getBlock = function(endChr, restString) {
                var block = '';
                var currChr = '';
                while ((currChr != endChr) && (restString.value !== '')) {
                    if (/'|"/.test(currChr)) {
                        block = $.trim(block) + getBlock(currChr, restString);
                    }
                    else if (/\{/.test(currChr)) {
                        block = $.trim(block) + getBlock('}', restString);
                    }
                    else if (/\[/.test(currChr)) {
                        block = $.trim(block) + getBlock(']', restString);
                    }
                    else {
                        block += currChr;
                    }
                    currChr = restString.charAt(0);
                    restString.value = restString.value.slice(1);
                }
                return $.trim(block);
            };

            do {
                var attr = getBlock(',', data);
                attrs.push(attr);
            }
            while (data.value !== '');
            return attrs;
        }
    });
})(jQuery);

自由に使用/編集してください:)


1
これは数値でもうまく機能し、以下の別の回答で述べられているように、それらに対して個別のparseIntループを実行する必要はありません。これは本当の深い考えです。どうぞよろしくお願いいたします。
Anmol Saraf 2012年

28

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

var array = string.split(',');

結果はどうなりますか?たとえば、var a = "hello、world、baby"; およびvar array = a.split( '、'); ->私の配列は次のようになります。array = ["hello"、 "world"、 "baby"]; ??
重要な開発者、

1
はい、そうです。結果の配列は、あなたが言及したとおりです。
Jakkwylde、2011年

あなたの答えは私にとってはうまくいきますが、私の新しいアレイは古いものに取って代わりません。手伝って頂けますか? var sampleTags = ['vinita@itsabacus.com']; console.log(sampleTags); $("#order_id").on("change", function() { var order_id = document.getElementById('order_id').value; $.ajax({url: "model/getUserMailIds.php",data:{order_id:order_id},type:'POST', success: function(result){ alert(result); var sampleTags = result.split(',');; console.log(sampleTags); }}); });
Vinita Pawar 2017年

16

次のことに注意してください。

 var a = "";
var x = new Array();
x = a.split(",");
alert(x.length);

警告します1


14

この関数にコンマ区切りの文字列を渡すと、配列が返されます。コンマ区切りの文字列が見つからない場合は、nullが返されます。

 function splitTheString(CommaSepStr) {
       var ResultArray = null; 

// Check if the string is null or so.
        if (CommaSepStr!= null) {


             var SplitChars = ',';
   // Check if the string has comma of not will go to else
                if (CommaSepStr.indexOf(SplitChars) >= 0) {
                    ResultArray = CommaSepStr.split(SplitChars);

                }
             else { 
  // string has only one value, can also check the length of the string or time and cross-check too. 
                    ResultArray = [CommaSepStr]; 
              }
        }
       return ResultArray ;
    }

3
コードのブロックを投稿するだけでなく、このコードが提起された問題を解決する理由を説明してください。説明がなければ、これは答えではありません。
Martijn Pieters

1
文字列に分割値が含まれるかどうかわからない場合は、これが最も正しい解決策です。この関数は、文字列にコンマがない場合(上記の例の場合)に、splitメソッドがエラーにならないようにします。
CoryDorning 2013年

1
注:大文字で始まる関数は、ほとんどの場合、呼び出されるように設計されています。呼び出されるように設計されていない関数では、小文字を使用するのが最適です。
Jsterman 2013

コンマなしの値が1つしかない場合、これは失敗しました。else { ResultArray = [CommaSepStr]; }2番目の後に追加if
Thomas Byy

おかげで追加されました。それ。
BJパテル

8

リターン関数

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/


3
テキスト文字列にエラーがあります-SyntaxError:予期しない識別子番号文字列は問題ありません。例えば。 var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); 結果は次のとおりです:
SyntaxError

7

私はこの質問にかなり前から答えていることを知っていますが、私の貢献はこのトピックを研究している他の人に有益だと思いました...

リストに項目が1つしかない(区切り文字がない)場合でも、文字列を配列に変換する関数を次に示します。

function listToAray(fullString, separator) {
  var fullArray = [];

  if (fullString !== undefined) {
    if (fullString.indexOf(separator) == -1) {
      fullAray.push(fullString);
    } else {
      fullArray = fullString.split(separator);
    }
  }

  return fullArray;
}

次のように使用します。

var myString = 'alpha,bravo,charlie,delta';
var myArray = listToArray(myString, ',');
myArray[2]; // charlie

var yourString = 'echo';
var yourArray = listToArray(yourString, ',');
yourArray[0]; // echo

split文字列に区切り文字がない場合(1項目のみ)はエラーをスローするため、この関数を作成しました


3
セパレータが見つからない場合でもエラーはスローされません。を'echo'.split(',')返し['echo']、を ''.split(',') 返します['']。あなたはします、あなたが呼び出す場合、エラーを取得するx.split(',')ときx(ときを含む文字列ではありませんxされて未定義またはnullの一切ありませんので、)split他のタイプのために利用できる機能。
Joel Lee

ああ、私は実際にsplit、listToArray関数を記述したときに未定義のオブジェクトに使用しようとしていたことを確認しました。ご指摘いただきありがとうございます
Kabb5 2013年

6

同様の問題がありましたが、csvを配列の配列に変換する必要があるため、より複雑になりました(各行は、内部にコンマで分割された項目の配列を持つ1つの配列要素です)。

最も簡単な解決策(そして私が賭けるより安全な方法)は、csvを配列の配列に変換する「no-header」オプションを持つPapaParse(http://papaparse.com/)を使用することでした。さらに、「 、」私の区切り文字として。

さらに、バウワーに登録されているので、次のことだけが必要でした。

bower install papa-parse --save

そしてそれを次のように私のコードで使用します:

var arrayOfArrays = Papa.parse(csvStringWithEnters), {header:false}).data;

本当に好きだった。


5
let str = "January,February,March,April,May,June,July,August,September,October,November,December"

let arr = str.split(',');

その結果:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

そしてあなたが次のものに変換したい場合:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

この:

"January,February,March,April,May,June,July,August,September,October,November,December";

使用する:

str = arr.join(',')




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.