rudra
rudra

Reputation: 200

how to parse Zero (0) as integer in JavaScript

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

Upvotes: 6

Views: 10499

Answers (4)

intentionally-left-nil
intentionally-left-nil

Reputation: 8336

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.

Upvotes: 2

amrender singh
amrender singh

Reputation: 8239

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

Upvotes: 1

charlietfl
charlietfl

Reputation: 171700

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"]

Upvotes: 6

31piy
31piy

Reputation: 23869

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

Upvotes: 13

Related Questions