Gå til innhold

[Løst] [JS] a.map(parseInt) -> NaN og tall som ikke finnes i "a" (parseFloat fungerer derimot som forventet)


Anbefalte innlegg

"a" er en array med heltall, hentet fra en tekststreng

 

"b" (a.map(parseInt)) burde vel funke, siden "a" kun inneholder heltall, men jeg skjønner ikke hvorfor jeg får NaN her og der. Det er også flere av tallene i "b" som ikke finnes i "a" en gang.

 

"c" (a.map(parseFloat)) funker derimot som jeg ville ha forventet, men hvorfor det? "a" består jo bare av heltall.

var a = ["53", "22", "54", "3", "22", "1", "1", "94", "56", "64", "20", "4", "14", "27", "32", "17", "32", "22", "14", "8", "6", "11", "25", "21", "2", "27", "2", "11", "17", "21", "7", "10", "14", "15", "0", "9", "1"]
var b = a.map(parseInt)
var c = a.map(parseFloat)

console.log("a: " + a)
console.log("b: " + b)
console.log("c: " + c)

Output:

 

a:

 

["53", "22", "54", "3", "22", "1", "1", "94", "56", "64", "20", "4", "14", "27", "32", "17", "32", "22", "14", "8", "6", "11", "25", "21", "2", "27", "2", "11", "17", "21", "7", "10", "14", "15", "0", "9", "1"]

 

b:

 

[53, NaN, NaN, NaN, 10, 1, 1, NaN, 46, 58, 20, 4, 16, 33, 44, 22, 50, 36, 22, 8, 6, 22, 49, 47, 2, 57, 2, 28, 35, 59, 7, 31, 36, 38, 0, 9, 1]

 

c:

 

[53, 22, 54, 3, 22, 1, 1, 94, 56, 64, 20, 4, 14, 27, 32, 17, 32, 22, 14, 8, 6, 11, 25, 21, 2, 27, 2, 11, 17, 21, 7, 10, 14, 15, 0, 9, 1]

Endret av Rognalf
Lenke til kommentar
Videoannonse
Annonse

Om du bruker var b = a.map(x => parseInt(x)) vil du få alle tallene
 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

var a = ["53", "22", "54", "3", "22", "1", "1", "94", "56", "64", "20", "4", "14", "27", "32", "17", "32", "22", "14", "8", "6", "11", "25", "21", "2", "27", "2", "11", "17", "21", "7", "10", "14", "15", "0", "9", "1"]
var b = a.map(x => parseInt(x))
var c = a.map(parseFloat)

console.log("a: " + a)
console.log("b: " + b)
console.log("c: " + c)
  • Liker 1
Lenke til kommentar

Sneaky! Så når jeg ikke eksplisitt angir at det er ett parameter, blir a[1] tolket som radix-argumentet til parseInt().

I koden min ovenfor, hvis jeg endrer a[1] til 10, så får jeg faktisk forventet resultat.

 

I artikkelen du henviser til ser jeg a.map(Number), som ser ut til å ha samme funksjon som a.map(parseFloat), bortsett fra at alle tegnene i tekststrengen må være sifre.

 

Les mer: 

- http://www.wirfs-brock.com/allen/posts/166

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Tricky_use_case

Endret av Rognalf
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...