how to parse Zero (0) as integer in JavaScript
Asked Answered
P

4

6

I am working on a basic calculator that takes input like this " 100 + 10/2 + 3 + 0 " and returns the output in a separate field. when I break this thing into an array zero is not parsed as integer. My code is as following

var arr = ["100", "+", "0"];
arr = arr.map(x => parseInt(x) || x);

console.log(arr);
Phonologist answered 21/7, 2018 at 17:48 Comment(0)
F
13

Zero is a falsy value, so short-circuiting won't work here. You need to check explicitly

var arr = ["100", "+","0"];
arr = arr.map( x => x == 0 ? 0 : (parseInt(x) || x));
console.log(arr);
Freightage answered 21/7, 2018 at 17:51 Comment(0)
Y
6

It's because 0 is falsy so after the parseInt("0") returns falsy you end up getting the string

Try using isNaN() instead

var arr = ["100", "+","0"];
arr = arr.map( x => isNaN(x) ? x : parseInt(x) );

// use F12 to see the console
console.log(arr); // output is being display as [100, "+","0"]
Yarrow answered 21/7, 2018 at 17:51 Comment(0)
R
2

Similar to other answers, zero is falsey. However, parseInt returns NaN upon failure, and that can be used to build the answer as follows:

let arr = ["100", "+", "0"];
arr = arr.map((x) => {
  const parsed = parseInt(x);
  return Number.isNaN(parsed) ? x : parsed;
});
console.log(arr);

IMO this is a better solution as it is explicit about the return types that parseInt returns, and doesn't rely on type coercion.

Note: There are fun nuances with isNaN. The ES2015 Number.isNaN is used here to prevent any issues with type coercion, although it's not strictly necessary in this case.

Rede answered 21/7, 2018 at 17:59 Comment(0)
S
1

parseInt("0") is falsy. You can use Number() to convert 0 to an integer.

Try the following:

var arr = ["100", "+", "0"];
arr = arr.map(x => !isNaN(Number(x))? Number(x) : x);

console.log(arr);
Shipmaster answered 21/7, 2018 at 17:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.