2011-12-21 12 views
5
console.log("1,2,3".split(",").map(parseInt)) 

grabadosmapa + parseInt - resultados extraños

[1, NaN, NaN] 

por qué?

Agregando un texto más innecesario aquí para hacer que esta pregunta "cumpla con los estándares de calidad SO", sea lo que sea que eso signifique.

Respuesta

2

Esto se discute en mayor detalle aquí: http://www.wirfs-brock.com/allen/posts/166. soluciones propuestas para este problema, junto con el obvio

a.map(function(e) { return parseInt(e, 10)}) 

incluyen también el constructor Número:

a.map(Number) 

o una solución basada en la aplicación parcial (ver http://msdn.microsoft.com/en-us/scriptjunkie/gg575560 para más):

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)) 
8

.map llamadas parseInt() con dos parámetros - el valor, y el índice de matriz:

parseInt('1', 0); // OK - gives 1 
parseInt('2', 1); // FAIL - 1 isn't a legal radix 
parseInt('3', 2); // FAIL - 3 isn't legal in base 2 
+0

Gracias! Sin embargo, otro javascript gotcha. – georg

+1

es solo un gotcha si no lee el manual ... – Alnitak

+1

un documentado gotcha, también conocido como comportamiento contraintuitivo, sigue siendo un gotcha. Lea: http://www.wirfs-brock.com/allen/posts/166 – georg

3

.map llama a parseInt() con tres parámetros: el valor, el índice de la matriz y toda la instancia de la matriz.