在下面的函数中,我的代码返回 NaN
,而不是数字。该函数主要计算由数组中的 k
个连续字符串组成的第一个最长字符串的长度 - strarr
。
function longestConsec(strarr, k) {
var n = strarr.length;
if(n === 0 || n < k || k<=0){
return "";
}
else{
var arrI = [0,0,0,0];
var max;
for (var i = 0; i<(strarr.length - k); i++){
for(var j = i; j<(i+k); j++){
arrI[i] += strarr[j].length;
}
}
max = arrI.indexOf(Math.max(arrI));
return Math.max(arrI) //typeof(arrI[i]) for i {0,1,2,3} returns 'number' and arrI.length returns 4
}
}
console.log(longestConsec(["zone", "abigail", "theta", "form", "libe", "zas"], 2), "abigailtheta")
在上面的函数中,我的代码返回 NaN,而不是数字。
该函数基本上计算由数组 - strarr 中的 k 个连续字符串组成的第一个最长字符串的长度。但是,如果我将 return Math.max(arrI)
行替换为 return Math.max(parseInt(arrI))
那么我的代码就可以正常工作。
我的问题是,这应该不重要,因为 arrI
是一个数字数组,而不是字符串,但显然它确实如此。为什么?
最佳答案
Math.max
没有定义为采用数组,它被定义为采用离散参数。
如果要将其应用于数组,可以:Math.max.apply(Math, arr)
。在 ES2015+ 中,您还可以使用展开表示法:Math.max(...arr)
当您向其抛出 parseInt
时,它没有给出 NaN
的原因是 parseInt
将其参数强制转换为字符串,然后解析该字符串的开头,在第一个无效字符处停止,并返回到目前为止的内容。当您将数组强制转换为字符串时,它会将每个条目强制转换为字符串,然后用逗号将它们连接起来,因此例如 [1, 2, 3, 4]
变为 "1,2,3 ,4"
。 parseInt
将解析其中的 1
。实际上,您正在执行 Math.max(arr[0])
,这不是您想要的。
关于javascript - Math.max 和 parseInt 遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43496289/