【问题标题】:Javascript for loop not iterating across array or values in an if statement not updating as plannedJavascript for 循环未遍历数组或 if 语句中的值未按计划更新
【发布时间】:2021-12-01 16:40:42
【问题描述】:

尝试返回任何给定数字中的最高 5 位数字,即 34858299999234 将返回 99999

我想我已经把它缩小到 for 循环没有正确迭代数组或者“hold1”和“hold2”的值没有更新。


function solution(digits){
  
  //Convert string to array to iterate through
  let arr = digits.split("");
  let final = 0;
  //iterate through the array in 5 sequence steps
  for(let i = 0; i < arr.length-1; i++){
      let hold1 = arr[i] + arr[i+1] +  arr[i+2]  + arr[i+3]  + arr[i+4];
      hold1 = parseInt(hold1,10); //converting string to int so if statement functions correctly
      let hold2 = arr[i+1] + arr[i+2]+ arr[i+3] +  arr[i+4]  + arr[i+5];
      hold2 = parseInt(hold2,10);
          if(hold1 >= hold2){        
             final = hold1;
          }else{
            final = hold2;
          }
    return final;
  }
  
}

【问题讨论】:

  • How do I ask a good question?: “描述问题。“它不起作用”不足以帮助人们理解您的问题。相反,告诉其他读者预期的结果行为应该是。告诉其他读者错误消息的确切措辞是什么,以及产生它的代码行。"
  • i === arr.length - 2(循环中的最后一个值)时,您期望arr[i+3]arr[i+4]、...是什么?
  • 无论如何,你似乎都在循环中return final.. IOW:你的循环完全没有意义。
  • Keith 是对的...将 return 语句移出循环。

标签: javascript for-loop


【解决方案1】:

如果你需要五位数的结果,你需要像这样改变 for 循环:

for (let i = 0; i < arr.length - 5; i++) {

否则您将生成少于 5 位数的结果。

另外,我认为您缺少 Math.max 方法,该方法将比较两个数字以返回更大的数字。

我这样重写了你的函数:

function solution(digits) {
  let op = 0;
  let length = 5;
  let stringDigits = String(digits); /// <-- I use string instead of array
  if (stringDigits.length <= length) {
    return digits; /// <-- If input is shorter than 5 digits
  }

  for (let i = 0; i < stringDigits.length - length; i++) {
    const fiveDigitsValue = stringDigits.substr(i, length);
    op = Math.max(op, Number(fiveDigitsValue));
  }
  return op;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多