javascript - Math.max 和 parseInt 遇到错误

标签 javascript arrays parseint

在下面的函数中,我的代码返回 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/

相关文章:

javascript - 添加在 Json 对象中找到的数字

javascript - 为什么 arr.map(parseInt) 在 JavaScript 中不起作用?

javascript - parseInt 输出 int 而不是八进制数

javascript - 创建 "Save As"用户脚本

javascript - 我可以写一个JS函数: returns as a normal function would or wait and return AJAX results?

php - Python 对象输出到 PHP 数组

gwt - 为什么GWT应用程序在Blackberry OS7上崩溃?

javascript - 面临 knockout 绑定(bind)问题

javascript - 将事件添加到 Vue.js 组件中动态渲染的 HTML

c++ - 我应该删除指向静态的本地指针吗