我正在研究一个基本的计算器,需要像这样的输入
" 100 + 10/2 + 3 + 0 "
并在单独的字段中返回输出。
当我把这个东西分解成一个数组时,零不会被解析为整数。我的代码如下
var arr = ["100", "+", "0"];
arr = arr.map(x => parseInt(x) || x);
console.log(arr);
答案 0 :(得分:9)
零是falsy value,因此短路在这里不起作用。您需要明确检查
var arr = ["100", "+","0"];
arr = arr.map( x => x == 0 ? 0 : (parseInt(x) || x));
console.log(arr);
答案 1 :(得分:6)
这是因为0
虚假,所以在parseInt("0")
返回虚假之后,您最终得到了字符串
尝试改用isNaN()
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"]
答案 2 :(得分:2)
类似于其他答案,零为假。但是,parseInt
returns NaN失败时,可以用来建立答案,如下所示:
let arr = ["100", "+", "0"];
arr = arr.map((x) => {
const parsed = parseInt(x);
return Number.isNaN(parsed) ? x : parsed;
});
console.log(arr);
IMO这是一个更好的解决方案,因为它明确了parseInt返回的返回类型,并且不依赖于类型强制。
注意:isNaN有一些有趣的细微差别。 ES2015 Number.isNaN用于防止类型强制转换的任何问题,尽管在这种情况下并非必须如此。
答案 3 :(得分:1)
parseInt("0")
是虚假的。您可以使用Number()
将0转换为整数。
尝试以下操作:
var arr = ["100", "+", "0"];
arr = arr.map(x => !isNaN(Number(x))? Number(x) : x);
console.log(arr);