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

时间:2013-05-06 09:50:39

标签: javascript jquery

我在JavaScript中有一个整数的一维数组,我想用逗号分隔的字符串添加数据,有没有一种简单的方法可以做到这一点?

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

10 个答案:

答案 0 :(得分:27)

您可以使用split()从逗号分隔的字符串中获取字符串数组。如果您对字符串数组的元素进行迭代并执行数学运算,那么该元素将被运行时强制转换为数字,但仍然有字符串数组。要转换逗号分隔的字符串int数组,请参阅编辑

arr = strVale.split(',');

Live Demo

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]));

答案 1 :(得分:18)

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

修改&gt;&gt;

感谢 @NickN 注意!使用此方法,如果您通过例如,过滤器是适用的。想要排除任何非数字值:

? "123,87,hello,65".split(",").map(Number).filter(x => !isNaN(x)) 
> [123, 87, 65] 

答案 2 :(得分:15)

您可以使用String split method将单个数字作为字符串数组。然后convert them to numbers使用一元加号运算符,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将其转换为applyingpush

arr.push.apply(arr, strVale.split(",").map(Number));

答案 3 :(得分:11)

你需要使用几种方法,就是这样!

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

输出将是数字数组。

答案 4 :(得分:3)

split()方法用于将字符串拆分为子字符串数组,并返回新数组。

Syntax:
  string.split(separator,limit)


arr =  strVale.split(',');

SEE HERE

答案 5 :(得分: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。

答案 6 :(得分:2)

解决方案:

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

答案 7 :(得分:0)

当字符串值使用逗号(,)正确时,这是一种简便快捷的解决方案。

但是,如果字符串的最后一个字符带有逗号,则会形成一个空白数组元素,并且该字符串也将被删除。

  

“ 123,234,345”

所以我建议使用push()

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

答案 8 :(得分:0)

到目前为止,所有给定的答案都会为",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

我们不能同时将两个过滤步骤结合在一起。

答案 9 :(得分:0)

这篇文章中有很好的解决方案,但我想再补充一个。我建议不要使用 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]