问题描述
首先,我是一名编码的初学者,几周前就开始了,这是一种角色/智力挑战。
我想知道为什么在这个简单的脚本中得到空数组。我认为这与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.map和Array.prototype.reduce。
附带说明:尝试使用为您处理格式代码的编辑器/ IDE。在您的代码段中,格式设置(例如forEach调用的结尾)使您难以推理代码。