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

baskılar haritası + parseInt - garip sonuçlar

[1, NaN, NaN] 

neden

?

Bu soruyu "SO kalite standartlarını karşıla" yapmak için daha fazla gereksiz metin eklemek, bunun anlamı ne olursa olsun.

cevap

2

Bu burada çok detaylı olarak ele alınmaktadır: http://www.wirfs-brock.com/allen/posts/166. belirgin

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

da sayısı kurucu dahil ile birlikte, bu soruna çözüm önerilen: kısmi uygulamaya göre

a.map(Number) 

veya bir çözelti (Daha fazla bilgi için http://msdn.microsoft.com/en-us/scriptjunkie/gg575560 bakınız):

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 aramalar iki parametrelerle parseInt() - değeri ve dizi indeksi:

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

Teşekkürler! Yine başka bir javascript var. – georg

+1

Eğer el kitabını okursanız sadece bir gotcha var ... – Alnitak

+1

belgelenmiş bir gotcha, karşı-sezgisel davranış, hala bir gotcha. Oku: http://www.wirfs-brock.com/allen/posts/166 – georg

3

.map, parseInt() işlevini üç parametreyle (değer, dizi dizini ve tüm dizi örneği) çağırır.