map + parseInt - 奇怪的结果

geo*_*org 7 javascript

console.log("1,2,3".split(",").map(parseInt))
Run Code Online (Sandbox Code Playgroud)

版画

[1, NaN, NaN]
Run Code Online (Sandbox Code Playgroud)

为什么?

在这里添加一些更多不必要的文本,使这个问题"满足SO质量标准",无论这意味着什么.

Aln*_*tak 11

.map调用parseInt()3个的值,该数组索引,和阵列本身-参数.

index参数被视为基数:

parseInt('1', 0, a); // OK - gives 1
parseInt('2', 1, a); // FAIL - 1 isn't a legal radix
parseInt('3', 2, a); // FAIL - 3 isn't legal in base 2 
Run Code Online (Sandbox Code Playgroud)

  • 如果您不阅读手册,这只是一个陷阱... (2认同)

geo*_*org 3

这里详细讨论了这一点:http://www.wirfs-brock.com/allen/posts/166。针对这个问题提出的解决方案以及显而易见的解决方案

a.map(function(e) { return parseInt(e, 10)})
Run Code Online (Sandbox Code Playgroud)

还包括 Number 构造函数:

a.map(Number)
Run Code Online (Sandbox Code Playgroud)

或基于部分应用程序的解决方案(有关更多信息,请参阅http://msdn.microsoft.com/en-us/scriptjunkie/gg575560 ):

Function.prototype.partial = function(/*args*/) {
    var a = [].slice.call(arguments, 0), f = this;
    return function() {
        var b = [].slice.call(arguments, 0);
        return f.apply(this, a.map(function(e) {
            return e === undefined ? b.shift() : e;
        }));
    }
};

["1", "2", "08"].map(parseInt.partial(undefined, 10))
Run Code Online (Sandbox Code Playgroud)