我在 JavaScript 中有一个整数的一维数组,我想从逗号分隔的字符串中添加数据,有没有简单的方法可以做到这一点?
例如:var strVale = "130,235,342,124 ";
我在 JavaScript 中有一个整数的一维数组,我想从逗号分隔的字符串中添加数据,有没有简单的方法可以做到这一点?
例如: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] );
或者,在一个步骤中,使用Arraymap
将它们转换并将它们应用于一个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);});
输出将是数字数组。
您可以像这样拆分和转换
var strVale = "130,235,342,124 ";
var intValArray=strVale.split(',');
for(var i=0;i<intValArray.length;i++{
intValArray[i]=parseInt(intValArray[i]);
}
现在您可以在逻辑中使用 intValArray。
split() 方法用于将字符串拆分为子字符串数组,并返回新数组。
Syntax:
string.split(separator,limit)
arr = strVale.split(',');
解决方案:
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())}
})
这篇文章中有很好的解决方案,但我想再添加一个。而不是使用filter
,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]