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

4 Answers 4

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

Sign up to request clarification or add additional context in comments.

Comments

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

Comments

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.

Comments

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.