コンマ区切りの文字列からデータを追加したい JavaScript の整数の 1 次元配列があります。これを行う簡単な方法はありますか?
例:var strVale = "130,235,342,124 ";
コンマ区切りの文字列からデータを追加したい JavaScript の整数の 1 次元配列があります。これを行う簡単な方法はありますか?
例:var strVale = "130,235,342,124 ";
? "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]
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]));
Stringsplit
メソッドを使用して、単一の数値を文字列の配列として取得できます。次に、単項プラス演算子、関数 orを使用して数値に変換し、配列に追加します。Number
parseInt
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));
これにはいくつかの方法を使用する必要があるだけです。
var strVale = "130,235,342,124";
var resultArray = strVale.split(',').map(function(strVale){return Number(strVale);});
出力は数値の配列になります。
split() メソッドは、文字列を部分文字列の配列に分割するために使用され、新しい配列を返します。
Syntax:
string.split(separator,limit)
arr = strVale.split(',');
のように分割して変換できます
var strVale = "130,235,342,124 ";
var intValArray=strVale.split(',');
for(var i=0;i<intValArray.length;i++{
intValArray[i]=parseInt(intValArray[i]);
}
これで、ロジックで intValArray を使用できるようになりました。
解決:
var answerInt = [];
var answerString = "1,2,3,4";
answerString.split(',').forEach(function (item) {
answerInt.push(parseInt(item))
});
これまでに与えられたすべての回答は、次のような文字列に対して予期しない結果をもたらす可能性があります",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
両方のフィルター手順を組み合わせることはできません。
この投稿には良い解決策がありますが、もう 1 つ追加したいと思います。filter
andを使用する代わりに、すべてのアイテムを一度だけ反復する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]