【问题标题】:Why does my function keep coming back as undefined?为什么我的函数总是返回未定义?
【发布时间】:2022-01-16 12:05:29
【问题描述】:

这是我的代码。我对javascript还是很陌生,所以我不明白为什么添加函数会阻止for语句增加整数。

const arr = [10,10,16,12]

function incrementByOne(arr) {
  // arr is an array of integers(numbers), Increment all items in the array by
  // return the array


for (const i = 0; i < arr.length; i++){
  arr[i] += 1;

  
}
return arr
}

任何帮助将不胜感激。

【问题讨论】:

  • 一个问题是您在循环中使用consti 应该增加,所以它不应该是一个常数。
  • 您是否在浏览器开发者工具控制台中检查过错误?这始终是调试的第一步
  • 好的...只是询问,因为没有提及它,并且总是很高兴告诉我们“我没有看到错误” 您不会根据minimal reproducible example 显示在任何地方调用该函数。从 const 更改为 let 应该可以正常工作
  • 对不起,如果我觉得我很刻薄,那不是我的本意。我真的很感激这个建议。以后我会更清楚我已经尝试过哪些故障排除。
  • 没问题。学习调试和从调试的角度思考与编写代码本身一样重要,甚至更重要

标签: javascript arrays increment


【解决方案1】:

您应该使用 let i = 0 而不是 const i= 0 来初始化循环迭代计数器 i

const arr = [10,10,16,12]

function incrementByOne(arr) {
  // arr is an array of integers(numbers), Increment all items in the array by
  // return the array


for (let i = 0; i < arr.length; i++){
  arr[i] += 1;

  
}
return arr
}

然后调用incrementByOne函数

incrementByOne(arr);

【讨论】:

  • 哪里有什么改变的解释,为什么?仅代码答案不是很有帮助
  • 我在回答中添加了解释:)
  • 好的开始,但如果我是 OP,我可能也想知道为什么
  • 我认为基本上,因为它是一个常数并由0初始化,它的值永远不会改变。
  • 感谢@LahEzcen 的建议。到目前为止,我已经尝试使用 let 和 var,但它仍然以未定义的形式返回。
【解决方案2】:

你也可以使用地图:

const incrementByOne = (arr) => arr.map((element) => element + 1);

【讨论】:

    【解决方案3】:
    const arr = [10,10,16,12]
    
    function incrementByOne(arr) {
        // arr is an array of integers(numbers), Increment all items in the array by
        // return the array
    
    
        for (let i = 0; i < arr.length; i++){
            arr[i] += 1;
        }
        return arr
    }
    let a = incrementByOne(arr)
    console.log(a)
    

    【讨论】:

      【解决方案4】:

      我在 Node.js 下运行了你的代码:

      代码:

      'use strict';
      
      const arr = [10,10,16,12]
      
      function incrementByOne(arr) {
          for (const i = 0; i < arr.length; i++) {
            arr[i] += 1;
          }
          return arr
      }
      
      console.log(incrementByOne(arr));
      

      输出:

      $ node incr.js
      incr.js:6
              for (const i = 0; i < arr.length; i++){
      TypeError: Assignment to constant variable.
          at incrementByOne (incr.js:6:37)
      $
      

      如您所见,它抱怨您正在尝试更改 i 的值,您的代码说该值是不变的。写let i = 0 为非常量值。

      代码:

      'use strict';
      
      const arr = [10,10,16,12]
      
      function incrementByOne(arr) {
          for (let i = 0; i < arr.length; i++) {
            arr[i] += 1;
          }
          return arr
      }
      
      console.log(incrementByOne(arr));
      

      输出:

      $ node incr.js
      [ 11, 11, 17, 13 ]
      $ 
      

      【讨论】:

        猜你喜欢
        • 2021-08-01
        • 2014-06-04
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 2020-03-28
        相关资源
        最近更新 更多