2011-02-10 16 views
1

例えば、int型の配列に文字列値を変換するための最良の方法は何ですか:文字列値

var s = '1,1,2'; 

へ:

var a = [1,1,2]; 

おかげ

+0

文字列配列の値を信頼するか、各値が数値であることを検証する必要がありますか? – jball

+0

私はsplitを使ってparseIntを使って値を確認することを考えていましたが、 – xylar

+0

値を信頼していれば、@Andy Eの答えの最初の部分の解は最も簡単で素早くなります。 – jball

答えて

3

JavaScriptは動的型言語です。つまり、配列項目が数字であることはそれほど重要ではない可能性があります。その場合は、あなただけsplit()を使用して検討する必要があります

for (var i = 0, max = a.length; i < max; i++) 
    a[i] = +a[i]; 

があります:

var s = '1,1,2', 
    a = s.split(","); 

彼らが数字だということが重要である場合は、あなたの最善の策は、その後、それらを反復することですECMAScript第5版のメソッドmapでも、すべてのブラウザではまだ実装されていません。

+0

文字列が数値であるかどうかを検証する必要がありますか、それとも有効であることを既に知っていますか? –

+0

ありがとうございます。a [i] = parseInt(a [i])に 'a [i] = + a [i];を使用する利点はありますか? – xylar

+1

@xylar: 'parseInt'の2番目の引数を指定しないと、数字が0から8進数として解析される可能性があります。 '+ a [i]'は 'Number(a [i])'と等価であり、数字が '0x'(16進数)で始まらない限り常に小数点として解析されます。ほとんどの場合、私はそれを使用しています:-) –

5
"1,2,3".split(",").map(Number); 

そして、 mapを実装していないブラウザの場合は、ここからこのような実装をとってください:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map

Array.prototype.mapはECMAScript5にありますので、Array.prototypeを追加することを心配しないでください。

+0

+1 'map'のアイデア - 互換性の実装は標準ループと比べて少し遅いでしょう。 –

+0

ループとラップされたループの違いは無視できます。 – kirilloid

1

データが安全である場合.eval()を使用できます。

var a = eval('[' + s + ']'); 

セキュリティが不明な場合は、JSON.parseを使用できます。

var a = JSON.parse("[" + s + "]"); 

...ネイティブではサポートしていないブラウザにはパーサーを含める必要がありますが、

+0

値のいずれかが無効な場合、構文エラーがスローされることを前もって警告します。 '1,2,3a、4'。ソースを信頼できるなら、私は 'JSON.parse'アプローチがとても好きです。 –

+1

@Andy E:良い点。これは、有効な数字が必要な場合に機能します。無効なものが見つかると、構文エラーが発生することがあります。これがどのように使用されるかによって、私は推測します。 :o) – user113716

関連する問題