For循环仅在数组参数上运行一次

时间:2019-07-10 07:58:33

标签: javascript arrays function for-loop

我正在尝试创建一个基本的for循环,该循环将遍历函数的参数。参数的数量可以变化,因此我将内置的“ arguments”对象用于此目的。但是,嵌套在函数中的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,或将参数列表中的第一个值更改为任何值。这似乎很简单,但是我挠头了-有什么想法吗?

4 个答案:

答案 0 :(得分:0)

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

 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))

答案 1 :(得分:0)

由于您使用的是return,因此无需继续就可以退出整个功能。您可以通过多种方法来处理这种情况-一种方法是代替返回保存结果并最终返回,如Mamun在回答中解释的那样;或者,如果您希望以这种方式进行操作,则可以尝试使用map来表示相同的结果< / p>

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))

答案 2 :(得分:0)

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

我建议对参数列表和结果列表使用数组。 因此,函数调用为: 门票([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]));

答案 3 :(得分:-1)

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