如何在JavaScript中将逗号分隔的字符串转换为数字数组

40

我有一个JavaScript中的一维整数数组,想要从逗号分隔的字符串中添加数据,是否有简单的方法可以实现?

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


https://dev59.com/THE85IYBdhLWcg3wRBVU - Ram
11个回答

46
? "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]

3
这太棒了!到目前为止最佳答案。 - Kagawa
2
非常好的答案。如果你想排除任何非数字值,你可以添加一个NaN过滤器:"123,87,hello,65".split(",").map(Number).filter(x => !isNaN(x)) 将会得到 [123, 87, 65] - NickN
这对于 ",,1,".split(",").map(Number).filter(x => !isNaN(x)) 失败,因为它将返回 [0, 0, 1, 0]。这是由于 Number("") 返回 0。还要注意 isNaN("") 返回 false - connexo
@connexo,你可以通过 ",,1,".split(",").map(Number).filter(x => x!="" && !isNaN(x)) 轻松解决它。 - serge
@Serge 不行,因为这会排除 0 值。尝试使用 ",,0,".split(",").map(Number).filter(x => x!="" && !isNaN(x))。https://dev59.com/kGQo5IYBdhLWcg3wBLYo#56426645 可以解决这个问题。 - connexo

28
您可以使用split()方法将逗号分隔的字符串转换为字符串数组。如果您对字符串数组的元素进行迭代并执行数学运算,则这些元素将被运行时强制转换为数字,但仍然保持字符串数组。如需将逗号分隔的字符串转换为整数数组,请参见编辑
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

编辑,逗号分隔的字符串转换为整数数组 在上面的示例中,字符串在表达式中被转换为数字,但要从字符串数组获取整数数组,您需要将其转换为数字。

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

2
这是错误的/只是接近实际解决方案的一步。它将数字保存为字符串到数组中,而不是整数! - ProblemsOfSumit
此内容仅为翻译,不将值转换为INT,如OP所要求。 - serge
我已经更新了我的答案,你们两个都是对的。虽然示例显示由于表达式将字符串数组元素转换为数字,但数组是字符串而不是数字。 - Adil
现在尝试这个 var strVale = "130,,,0,,235,342,124"; - connexo

16
您可以使用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));

12

你只需要使用几个方法,就可以做到这一点,仅此而已!

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

输出将是数字数组。


不错,但是看看我的答案,有一种更简洁的方法来完成它 ;) - serge

3
split()方法用于将字符串分割成子字符串数组,并返回新的数组。
Syntax:
  string.split(separator,limit)


arr =  strVale.split(',');

SEE HERE


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。

2
解决方案:
var answerInt = [];
var answerString = "1,2,3,4";
answerString.split(',').forEach(function (item) {
   answerInt.push(parseInt(item))
});

那不是一个字符串。 - delroh
@delroh 没错,已经修改了,谢谢! - Ravi Gaur

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]

请注意,由于某些原因,HTML代码已保留。
isNaN("") // false!

isNaN(" ") // false

我们无法合并这两个过滤步骤。

0
为了同时接受字符串值并避免崩溃,我们可以这样解决。
 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);

0

当字符串值带有逗号(,)时,这是一种简单快捷的解决方案。

但是,如果字符串以逗号结尾,则会产生一个空白数组元素,并且还会删除其周围的额外空格。

"123,234,345,"

因此,我建议使用 push()

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接