所以我需要在脚本中进行一些简单的减法计算,但是事实证明它并不是那么简单,我在这里做错了什么?
x= dbo.collection("master").find({Process: "Process1"}).toArray(); //Query my Mongo database
s1 = Math.max.apply(null, x.map(o => o.NumberInt)); //narrow down query to find the correct number
s2 = (s1-1); //minus 1 from the result to find next result
//s2 returns -Infinity
我100%确保s1
是整数
答案 0 :(得分:3)
为什么此计算返回-Infinity?
检查Math.max.apply(null, input)
可以返回Infinity
或-Infinity
的条件很容易
function doTheMagic(input){
return Math.max.apply(null, input);
}
console.log(doTheMagic([1,2]));
console.log(doTheMagic(["1","2"]));
console.log(doTheMagic([null, undefined]));
console.log(doTheMagic([Infinity]));
console.log(doTheMagic(null));
console.log(doTheMagic({}));
console.log(doTheMagic([]));
-Infinity
出现在任何您有null,空数组或空白对象的地方-可能还有其他一些地方。这些是您的代码最有可能产生的结果。
我会弯腰,建议您的x.map(o => o.NumberInt)
返回一个空数组。
答案 1 :(得分:0)
如果提供的参数不是数字(或不能强制为数字),则结果将为<audio src="http://username:password@webdav.server" crossorigin="use-credentials" />
NaN
仅在不带任何参数的情况下返回Math.max
。
-Infinity
但是您正在使用console.log(Math.max()); // -Infinity
console.log(Math.max(1)); // 1
console.log(Math.max("")); // 0 (coerced to 0)
console.log(Math.max({})); // NaN (not a number)
。
如果Math.max.apply(null, x.map(o => o.NumberInt));
的第二个参数不可迭代,则不会有任何参数传递给Function#apply
,这与具有空数组相同。
要检查对象是否可迭代,可以使用以下表达式:
Math.max
最后,if (typeof x[Symbol.iterator] === "function")
console.log("I am iteratable.");
为空或不可迭代的对象。