When you want to turn all elements in an array from strings to integers, it comes to common sense that you want to use the Array.prototype.map function with Javascript’s built-in function parseInt:

 

 

 

 

 

 

var numbers = ["1", "2", "3"];
var new_numbers = numbers.map(parseInt);
[/shell]

However, this will give you unexpected output of:

[js]
[ 1, NaN, NaN ]
[/shell]

Why?

Well, this is because "map" passes more arguments into the callback function:

[js]
callback(item, index, array);

This works fine if your callback function only accepts one arguments, which will be “item”. However, “parseInt” function receives two arguments:

parseInt(string, base)

So in our case the actual value of “index” got interpreted as “base” in the parseInt function, and of course it will give you very unexpected result.

The solution is to create a small function which wraps the “parseInt”:

[js]
var numbers = ["1”, "2”, "3”];
var new_numbers = numbers.map(function(x) { return parseInt(x, 10) })
[/shel[/shell]iv class="ericl-in-post-ads-after" style="margin-top: 20px; margin-bottom: 20px; clear: both; " id="ericl-2116646996">

This should get you green lights in your test cases :).

Leave a Reply

Your email address will not be published. Required fields are marked *