35

コンマ区切りの文字列からデータを追加したい JavaScript の整数の 1 次元配列があります。これを行う簡単な方法はありますか?

例:var strVale = "130,235,342,124 ";

4

10 に答える 10

39
? "123,87,65".split(",").map(Number)
> [123, 87, 65]

編集>>

@NickN@connexo のコメントに感謝します! たとえば、次の場合はフィルターが適用されます。数値以外の値を除外したい:

?", ,0,,6, 45,x78,94c".split(",").filter(x => x.trim().length && !isNaN(x)).map(Number)
> [0, 6, 45]
于 2015-11-24T10:09:00.273 に答える
28

split()を使用して、カンマ区切りの文字列から文字列配列を取得できます。文字列配列の要素に対して反復して数学演算を実行すると、その要素は実行時のキャストによって数値として扱われますが、それでも文字列配列があります。コンマ区切りの文字列 int 配列を変換するには、編集を参照してください。

arr = strVale.split(',');

ライブデモ

var strVale = "130,235,342,124";
arr = strVale.split(',');
for(i=0; i < arr.length; i++)
    console.log(arr[i] + " * 2 = " + (arr[i])*2);

出力

130 * 2 = 260
235 * 2 = 470
342 * 2 = 684
124 * 2 = 248

編集、カンマ区切りの文字列から int 配列へ上記の例では、文字列は式で数値にキャストされますが、文字列配列から int 配列を取得するには、数値に変換する必要があります。

var strVale = "130,235,342,124";
var strArr = strVale.split(',');
var intArr = [];
for(i=0; i < strArr.length; i++)
   intArr.push(parseInt(strArr[i]));
于 2013-05-06T09:51:08.803 に答える
16

Stringsplitメソッドを使用して、単一の数値を文字列の配列として取得できます。次に、単項プラス演算子、関数 orを使用して数値に変換し、配列に追加します。NumberparseInt

var arr = [1,2,3],
    strVale = "130,235,342,124 ";
var strings = strVale.split(",");
for (var i=0; i<strVale.length; i++)
    arr.push( + strings[i] );

または、1 つのステップで、Arraymapを使用してそれらを変換し、それらを 1 つの single に適用pushします。

arr.push.apply(arr, strVale.split(",").map(Number));
于 2013-05-06T09:57:06.517 に答える
12

これにはいくつかの方法を使用する必要があるだけです。

var strVale = "130,235,342,124";
var resultArray = strVale.split(',').map(function(strVale){return Number(strVale);});

出力は数値の配列になります。

于 2013-05-06T10:10:33.703 に答える
3

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

Syntax:
  string.split(separator,limit)


arr =  strVale.split(',');

ここを見る

于 2013-05-06T09:52:19.300 に答える
3

のように分割して変換できます

 var strVale = "130,235,342,124 ";
 var intValArray=strVale.split(',');
 for(var i=0;i<intValArray.length;i++{
     intValArray[i]=parseInt(intValArray[i]);
}

これで、ロジックで intValArray を使用できるようになりました。

于 2013-05-06T09:54:50.157 に答える
2

解決:

var answerInt = [];
var answerString = "1,2,3,4";
answerString.split(',').forEach(function (item) {
   answerInt.push(parseInt(item))
});
于 2017-11-05T06:11:38.633 に答える
1

これまでに与えられたすべての回答は、次のような文字列に対して予期しない結果をもたらす可能性があります",1,0,-1,, ,,2"

",1,0,-1,,  ,,2".split(",").map(Number).filter(x => !isNaN(x))
// [0, 1, 0, -1, 0, 0, 0, 2]

これを解決するために、次の修正を思い付きました。

",1,0,-1,,  ,,2".split(',').filter(x => x.trim() !== "").map(Number).filter(x => !isNaN(x))
// [1, 0, -1, 2]

ため、ご了承ください。

isNaN("") // false!

isNaN(" ") // false

両方のフィルター手順を組み合わせることはできません。

于 2019-06-03T11:44:37.173 に答える
0

この投稿には良い解決策がありますが、もう 1 つ追加したいと思います。filterandを使用する代わりに、すべてのアイテムを一度だけ反復するmapために使用することをお勧めします。reduce

また、数字を探す正規表現の使用と比較します。ニーズに合った方法を評価してください。以下に例を示します。

const strA = ',1,0,-2,a3 , 4b,a5b ,21, 6 7,, 8.1'

const arrayOfNumbersA = strA.split(',').reduce((acc, val) => val && !Number.isNaN(+val) ? acc.push(+val) && acc : acc, [])
console.log(arrayOfNumbersA)

// => [1, 0, -2, 21, 8.1] - As you can see in the output the negative numbers 
// do work and if the number have characters before or after
// the numbers are removed from since they are treated like NaN. 
// Note: in this case the comma is the delimiting each number that will be evaluated in the reduce

const arrayOfNumbersB = strA.match(/[\d.]+/g).map(Number)
console.log(arrayOfNumbersB)

// => [1, 0, 2, 3, 4, 5, 21, 6, 7, 8.1] - As you can see in the output the negative numbers
// are transformed to positives and if the number have characters before or after
// the numbers placed any way. 
//Note: that in this case the regex is looking for digits no matter how they are separated.

// FYI: seeing all the steps using the reduce method
const arrayOfNumbersC = strA.split(',').reduce((acc, val) => {
  if(val && !Number.isNaN(+val)) {
    acc.push(+val)
  }
  
  return acc
 }, []) 
  
console.log(arrayOfNumbersC)
// => [1, 0, -2, 21, 8.1]

于 2021-07-06T14:48:55.417 に答える