簡體   English   中英

如何在 javascript 中將逗號分隔的字符串轉換為數字數組

[英]How to convert comma separated string into numeric array in javascript

我在 JavaScript 中有一個 integer 的一維數組,我想從逗號分隔的字符串中添加數據,有沒有簡單的方法可以做到這一點?

例如: 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]));

您可以使用String split方法將單個數字作為字符串數組獲取。 然后使用一元加運算符、 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] );

或者,在一個步驟中,使用Array map來轉換它們並將它們應用到一個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

我們不能結合兩個過濾步驟。

當字符串值與逗號(,)正確時,這是一個簡單快捷的解決方案。

但是如果字符串的最后一個字符帶有逗號,這會產生一個空白的數組元素,並且這也被刪除了它周圍的額外空格。

“123,234,345,”

所以我建議使用push()

var arr = [], str="123,234,345,"
str.split(",").map(function(item){
    if(item.trim()!=''){arr.push(item.trim())}
})

這篇文章中有很好的解決方案,但我想再添加一個。 我建議不要使用filtermap而是使用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]

為了同時獲取字符串值並避免被破壞,我們可以這樣解決

 let strVale = "130,235,342,124 ";
 let unformattedArray =strVale.split(',');

 const formatArray = (unformattedArray) => {
    if (unformattedArray.map(Number).includes(NaN)) {
    return unformattedArray;
}
else {
  return unformattedArray.map(Number);
}
}
    
  //then every time we want to format we call our function to format for us
 console.log(formatArray(unformattedArray));
 // or asign a value

  let foramttedArray =  formatArray(unformattedArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM