您可以在Javascript的forEach方法中调用for循环吗?

问题描述

首先,我是一名编码的初学者,几周前就开始了,这是一种角色/智力挑战。

我想知道为什么在这个简单的脚本中得到空数组。我认为这与var“ i”有关,但我找不到错误所在。

function divesc() {

var ssIn = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Input");
var ssOut = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Output");

var esc = ssIn.getRange(1,3).getValue(); //Escaños en reparto
var i = 0;
var arr = [400,200,100,50];
var newArr = []

newArr = arr.forEach(num => {
   for (var i = 1; i <= esc; i++){
   return (num/i)
   //    newArr.push(num)
   }
   newArr.push(num/i)
   }
)
Logger.log(newArr)
}

解决方法

Array.prototype.forEach不返回值,因此newArr将变得不确定。 JavaScript是一种动态语言,可以重新分配值(即使它们的类型不同)。

再返回for循环的第一次迭代,这意味着将仅计算num / 1的值;可能不是您想要的。

// newArr is now undefined!
newArr = arr.forEach(num => {
   for (var i = 1; i <= esc; i++){
   // If you return a value here,the loop will stop after the first round with i = 1!
   return (num/i)
   //    newArr.push(num)
   }
   newArr.push(num/i)
   }
)

您可以直接推入newArr使其正常工作。

arr.forEach(num => {
   for(var i = 1; i <= esc; i++) {
     newArr.push(num / i);
   }
)

如果您想了解更多信息以尝试实现算法的不同方法,请查看JavaScript的函数数组方法,例如Array.prototype.mapArray.prototype.reduce

附带说明:尝试使用为您处理格式代码的编辑器/ IDE。在您的代码段中,格式设置(例如forEach调用的结尾)使您难以推理代码。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...