我有下面的字符串

var a = "1,2,3,4";

当我…

var b = a.split(',');

我得到b为["1","2","3","4"]

我能做点什么让b等于[1,2,3,4]吗?


当前回答

作为一种变体,你可以使用组合_。Map和_。来自lodash库的多种方法。整个转型将更加紧凑。以下是官方文档中的一个例子:

_.map(['6', '8', '10'], _.ary(parseInt, 1));
// → [6, 8, 10]

其他回答

你可以使用数组。映射将每个元素转换为一个数字。

var a = "1,2,3,4";

var b = a.split(',').map(function(item) {
    return parseInt(item, 10);
});

检查文档


或者像User: thg435所指出的那样更优雅

var b = a.split(',').map(Number);

Number()将完成其余的工作:检查这里


注意:对于不支持map的旧浏览器,你可以自己添加一个实现:

Array.prototype.map = Array.prototype.map || function(_x) {
    for(var o=[], i=0; i<this.length; i++) { 
        o[i] = _x(this[i]); 
    }
    return o;
};

+string将尝试将字符串更改为数字。然后使用Array。映射函数来改变每个元素。

"1,2,3,4".split(',').map(function(el){ return +el;});

如果您需要将字符串数组转换为数字,这将非常有效。

const numbers = arr => arr.map(Number);
numbers(['1', '2', '3','4']);     // [1, 2, 3, 4]

将其映射为整数:

a.split(',').map(function(i){
    return parseInt(i, 10);
})

Map查看每个数组项,将其传递给所提供的函数,并返回一个包含该函数返回值的数组。map在旧的浏览器中是不可用的,但是大多数库,如jQuery或underscore都有一个跨浏览器版本。

或者,如果你喜欢循环:

var res = a.split(",");
for (var i=0; i<res.length; i++)
{
    res[i] = parseInt(res[i], 10);
}

作为一种变体,你可以使用组合_。Map和_。来自lodash库的多种方法。整个转型将更加紧凑。以下是官方文档中的一个例子:

_.map(['6', '8', '10'], _.ary(parseInt, 1));
// → [6, 8, 10]