【问题标题】:For loop only running once on array argumentsFor 循环仅在数组参数上运行一次
【发布时间】:2019-07-10 07:58:33
【问题描述】:

我正在尝试创建一个基本的 for 循环,它将遍历函数的参数。可以有可变数量的参数,因此我为此目的使用内置的“参数”对象。但是,嵌套在函数内的 for 循环似乎在参数的第一个索引之后停止。

我在这里阅读了一些类似的查询,这些查询建议在 for 循环中声明变量,以便它是函数的本地值而不是全局值,但这似乎也不起作用。

  function tickets(){

  var change = 0;

  for(var j = 0;j < arguments.length; j++) {
    if (arguments[j] == 25) {
     return(change + 1);
   }
    else if(arguments[j] == 50) {
      return(change - 1);
    }
    else {
      return(change - 3);
    }
  }
}

console.log(tickets(25, 25 ,50, 25, 100))

我希望上面的代码能够记录:

1 1 -1 1 -3

但它只返回 1,或者我将参数列表中的第一个值更改为的任何值。这看起来很简单,但让我摸不着头脑 - 有什么想法吗?

【问题讨论】:

  • 是的,这是return 语句的预期行为。
  • 另外,你的函数不接受任何输入参数。
  • @AsnimPAnsari 在 JS 中,你不必在函数定义中定义参数列表,参数在调用函数时传递。 arguments 是包含所有传递参数的本机对象。
  • @Teemu 谢谢。这对我来说是一个新信息
  • 也许你应该回顾一下 javascript 函数是如何工作的。您可以在这里eloquentjavascript.net/03_functions.html 进行操作,也可以修改页面上的示例并执行它们。 console.log(票(25)+票(25)+票(50)+票(25)+票(100));会做你所期望的。正如@Teemu 所说,return 将“返回”值并因此完成循环。

标签: javascript arrays function for-loop


【解决方案1】:

函数在第一次返回时停止,您必须将所有结果添加到一个数组中,并在循环结束后返回该数组

 function tickets(){

  var change = 0;
  var responses = [];

  for(var j = 0;j < arguments.length; j++) {
    if (arguments[j] == 25) {
     responses.push((change + 1));
   }
    else if(arguments[j] == 50) {
      responses.push((change - 1));
    }
    else {
      responses.push((change - 3));
    }
  }

  return responses;
}

console.log(tickets(25, 25 ,50, 25, 100))

【讨论】:

    【解决方案2】:

    由于您使用的是return,所以整个函数都退出而不继续。有很多方法可以管理这种情况 - 一种方法不是返回,而是保存结果并在最后返回,正如 Mamun 在回答中解释的那样,或者如果你想以时尚方式做,你可以使用 map 来做同样的事情

    function tickets(){
      var change = 0;
    
      return Array.from(arguments).map((d,j) => {
        if (arguments[j] == 25) {
         return(change + 1);
       }
        else if(arguments[j] == 50) {
          return(change - 1);
        }
        else {
          return(change - 3);
        }
      })
    }
    
    console.log(tickets(25, 25 ,50, 25, 100))

    【讨论】:

      【解决方案3】:

      您的函数不需要任何参数。 您需要在函数声明中添加一个参数。它就像您希望函数采用和处理的参数的占位符。在这种情况下: 功能票(参数){ }

      我建议对参数列表和结果列表都使用数组。 所以函数调用将是: 门票([25,25,50,25,100])

      正如其他人所建议的那样 - 您可以使用 array.map()、array.reduce() 或 forEach()。

      如果由于某种原因 for 循环是强制性的,这是一个可能的答案:

      function tickets(arguments) {
        var result = [];
      
        for (var j = 0; j < arguments.length; j++) {
          var change = 0;
          if (arguments[j] == 25) {
            result.push(change + 1);
          } else if (arguments[j] == 50) {
            result.push(change - 1);
          } else {
            result.push(change - 3);
          }
        }
        return result;
      }
      
      console.log(tickets([25, 25, 50, 25, 100]));

      【讨论】:

      【解决方案4】:

      return 退出函数执行。在您的情况下,将每个 return 更改为 console.log

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-19
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 2021-06-15
        相关资源
        最近更新 更多