【问题标题】:Experiencing error with Math.max and parseIntMath.max 和 parseInt 遇到错误
【发布时间】:2017-09-15 17:11:22
【问题描述】:

在以下函数中,我的代码返回 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,而不是数字。 该函数主要计算数组中第一个最长的字符串的长度,该字符串由数组中的 k 个连续字符串组成 - strarr。但是如果我用return Math.max(parseInt(arrI)) 替换return Math.max(arrI) 行,那么我的代码就可以正常工作了。

我的问题是这无关紧要,因为arrI 是一个数字数组,而不是字符串,但显然它确实如此。为什么?

【问题讨论】:

    标签: javascript arrays parseint


    【解决方案1】:

    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]),这不是你要找的。​​p>

    【讨论】:

      【解决方案2】:

      问题是,Math.max 将每个数字作为自己的参数:Math.max(1, 2, 3, 4...)。这就是为什么Math.max(arrI) 是 NaN。您想要的是以下内容:Math.max.apply(null, arrI);.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 2017-10-11
        相关资源
        最近更新 更多