【问题标题】:Backwards loop only printing undefined向后循环仅打印未定义
【发布时间】:2019-06-20 20:32:34
【问题描述】:

我正在尝试创建一个可以接收数组并向后显示其内容的函数。当我在参数中输入数组时,我无法理解为什么我的函数调用显示未定义。

var arrayOne = []

function printReverse(arrayOne) {
    for(var i = arrayOne.length-1; i < 0; i--) {
        console.log(arrayOne[i])
    }
}

【问题讨论】:

  • 您的函数不包含return 语句,因此它不返回值。
  • 你是如何调用你的函数的?
  • @Bergi 我想以相反的顺序显示数组的内容,但我现在想通了。谢谢
  • @user10463856 啊。看起来每个人都感到困惑,因为您使用了“返回”一词。

标签: javascript arrays function for-loop


【解决方案1】:

您的问题存在误解:

您想要实现的是屏幕上的console.log 元素,而不是return 任何东西。

你的代码

var arrayOne = []

function printReverse(arrayOne) {
    for(var i = arrayOne.length-1; i < 0; i--) {
        console.log(arrayOne[i])
    }
}

不起作用,因为您在 i &lt; 0 的代码中使用了错误的运算符。这将在第一次迭代时返回 false,因为 i 将是 arrayOne.length,如果上面有任何元素,它将是 &gt; 0

将此部分更改为i &gt;= 0,您的代码将工作并实际在控制台上打印值。

但是,如果你真的想要一个恢复的数组,那么你应该简单地使用Array reverse() 而不是编写一个函数来返回它。

【讨论】:

  • 是的,它现在可以工作了,我是 JS 和一般编程的新手,所以我忽略了 for 循环的一个基本组件。感谢您的宝贵时间
【解决方案2】:

所以有一些基本面不存在。如另一个答案中所述,i 永远不会小于0,因为您在for 循环中将其定义为大于0 的值。试试这样的东西

编辑:从数组将被突变的意义上说,cmets 是正确的,因此首先制作我使用扩展运算符添加的数组的副本 同样就返回 undefined 而言——除非您注释掉 return 语句,否则它应该返回 undefined

const arrayOne = [];

function printReverse(array) {
    if (!Array.isArray(array) && array.length === 0 ) {
        return 'The array is empty';
    }

    const arrCopy = [...array];

    // technically you could just reverse it
    // if you return it you have to assign it to someone on the function call

    // return arrCopy.reverse();

    // if you want to log the reversed array you could also
    // console.log(arrCopy.reverse());

    // if you want to reverse it then log each single index
    // arrCopy.reverse().forEach(function(item) {
    //     console.log(item);
    // })
}

// if you were to just return the reversed array you would have to assign it to a variable
// this is just an example and wouldnt technically work because arrayOne is empty
// also if you use this YOU HAVE TO RETURN THE ARRAY COPY
// const reversedArray = printReverse(arrayOne);

【讨论】:

  • printReverse(arrayOne) 实际上会改变 arrayOne,而且,除非数组为空,否则 reversedArray 将是未定义的。您的函数没有返回任何内容:/
  • 是的,我认为 i
  • 我编辑了这篇文章。你是正确的@Renan,这会改变数组,所以我更新了帖子以制作数组的副本。如果您不取消注释 return 语句,您将得到未定义的 const reversedArray = printReverse(arrayOne);。它不会为我返回 undefined
【解决方案3】:

如果你想让它返回一些东西,你必须在函数中添加一个返回,这样

function printReverse(arrayOne) {
    for(var i = arrayOne.length-1; i < 0; i--) {
        console.log(arrayOne[i]);
    }
    return "";
}

但是,就您而言,这没有多大意义。您只能返回一件事,无论是 String、int、array、object 等等。但是一旦你的程序遇到一个 return 语句,它就会在返回值后退出函数。

【讨论】:

  • 对沟通不畅表示歉意,目的是单独控制台记录每个值,而不是返回它本身,可以看出这是如何造成混乱的。现在想通了,谢谢你的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多