以下Javascript正在挂起。我一直在教自己使用Apps脚本对表格中的数据进行排序。我的网络开发人员朋友和我在过去2小时内一直无能为力,为什么这个特定的脚本停滞不前。它只是说永远运行脚本......
发生的事情是我将电子表格的一部分指定为日历区域,其中已经有一个我的其他功能打印到其上的动态日历。出于测试目的,我隔离了这个函数并给它一个虚拟数组,但函数应循环遍历日历,找到'date'的COORD,即1,2,3,4th,并返回该日期下空单元格的坐标(我将数据放入日历的地方)。
function printCalendarValues(array){
var array = [0,143,534,342,54,1,41,1];
var Calendar_Display_range = recruiter_sheet.getRange('B8:H19');
var Calendar_Display_values = Calendar_Display_range.getValues();
function getCellBelow(day, rangeArray){
for(i=0; i<rangeArray.length; i++){
for(j=0;j<rangeArray[i].length; j++){
if(rangeArray[i][j]==day){
var res = [i+9,j+2];
return res;
};
};
}
};
for(i=0;i<2;i++){ //< ---- THIS IS WHERE IT BREAKS
// If I take the code in this for loop out of it and run it
// only once then it runs as expected. It breaks when I put it in
// this for loop. You can see I only loop twice right now. I
// did that for testing, but i've tried twice, or array.length
// anything other than running it once breaks it.
var cellBelow = getCellBelow(i+1, Calendar_Display_values);
recruiter_sheet.getRange(cellBelow[0],cellBelow[1]).setValue(array[i]);
};
};
答案 0 :(得分:1)
您需要在函数顶部定义变量i
。
function printCalendarValues(array){
var i;//Define i - its' value will be undefined
或者您需要在var
参数中添加for
关键字。 for (var i = 0, etc
目前,变量i
是全局变量。 i
的值位于“全局范围”中。 您运行的任何功能都可以访问i
,就像现在一样。
当您的第二个for
循环调用getCellBelow
函数时,for
循环和函数getCellBelow
都会共享变量i
。因此,i
设置为1,然后调用函数getCellBelow
。然后i
被设置回零。所以你的for
循环将永远持续下去。它永远不会达到1. getCellBelow
函数不断将其设置为零。
for(i=0;i<2;i++){ //i gets set to zero and then incremented to 1
var cellBelow = getCellBelow(i+1, Calendar_Display_values);//function called
然后在函数getCellBelow;
for(i=0; i<rangeArray.length; i++){//i is set to zero and until the array lengh
因此,i
现在很容易大于一。您的循环for(i=0;i<2;i++){
将停止。
您可以通过添加Logger.log('i: ' + i)
语句,然后查看日志来查看。在“查看”菜单中,选择“运行代码后的日志”。
您应该在函数i
function getCellBelow(day, rangeArray){
应该是:
function getCellBelow(day, rangeArray){
var i;
因此,该函数中i
的使用将仅限于该函数,并且不会影响该函数之外的i
的任何其他值。