Javascript 结果中仅显示数组中的一个值
这可能是一个比我意识到的更复杂的问题,但我没有编码经验或培训,因此有了一个神秘的标题(我甚至不知道我在这里做什么。关于“循环”的东西我只知道)。所以如果Javascript 结果中仅显示数组中的一个值,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,这可能是一个比我意识到的更复杂的问题,但我没有编码经验或培训,因此有了一个神秘的标题(我甚至不知道我在这里做什么。关于“循环”的东西我只知道)。所以如果 foundCValues.push(colCdata[1][i])返回一列中的第一个结果,该列应该有多个结果,修复是否简单到只需在colCdata之后的括号内更改某些内容?我试过几种不同的方法,但没有一种能达到我的目的。我想返回整个列,或者返回列中不是NULL的所有值 下面是脚本中这一特定部分的其余部分。如果我需要张贴整个脚本或进一步解释,请让
foundCValues.push(colCdata[1][i])
返回一列中的第一个结果,该列应该有多个结果,修复是否简单到只需在colCdata
之后的括号内更改某些内容?我试过几种不同的方法,但没有一种能达到我的目的。我想返回整个列,或者返回列中不是NULL的所有值
下面是脚本中这一特定部分的其余部分。如果我需要张贴整个脚本或进一步解释,请让我知道
(变量i=0;i 1)的{
offset(0,1).clearDataValidations();
var colIndex=colBdata[0].indexOf(activeCell.getValue())+2;
如果(colIndex!=0){
如果(activeCell.getValue()!=“”){
var colBvalidationRange=colBss.getRange(2,colIndex,colBss.getLastRow()-1);
var colBvalidationRule=SpreadsheetApp.newDataValidation().RequireValidationRange(colBvalidationRange.build();
activeCell.offset(0,1).setDataValidation(colBvalidationRule);
}
}
}
////填充列C数据验证
//如果(e.range.getSheet().getName()!='Items'){
//if(activeCell.getColumn()==2&&activeCell.getRow()>1){
//offset(0,1).clearDataValidations();
//var colCIndex=colCdata[0].indexOf(activeCell.getValue())+2;
//如果(colCIndex!=0){
//如果(activeCell.getValue()!=“”){
//var colCvalidationRange=colCss.getRange(3,colCIndex,colCss.getLastRow()-1);
//var colCvalidationRule=SpreadsheetApp.newDataValidation().requireRewaminList(colCvalidationRange.build();
//activeCell.offset(0,1).setDataValidation(colCvalidationRule);
// }
// }
// }
//填充C列数据验证
if(activeCell.getColumn()==2&&activeCell.getRow()>1){
offset(0,1).clearDataValidations();
Logger.log(“valueToFind=“+valueToFind”);
Logger.log(“colCdata=“+colCdata”);
Logger.log(“colCdata.length=“+colCdata.length”);
对于(变量i=0;i 1){
offset(0,1).clearDataValidations();
var colEIndex=colEdata[0].indexOf(activeCell.getValue())+2;
如果(索引!=0){
如果(activeCell.getValue()!=“”){
var colevalidateRange=colEss.getRange(5,colEIndex,colEss.getLastRow()-1);
var colEvalidationRule=SpreadsheetApp.newDataValidation().requireRewaminList(colEvalidationRange.build();
activeCell.offset(0,1).setDataValidation(colEvalidationRule);
}
}
}
//填充F列数据验证
if(activeCell.getColumn()==5&&activeCell.getRow()>1){
offset(0,1).clearDataValidations();
var colFIndex=colFdata[0].indexOf(activeCell.getValue())+2;
如果(colFIndex!=0){
如果(activeCell.getValue()!=“”){
var colFvalidationRange=colFss.getRange(4,colFIndex,colFss.getLastRow()-1);
var colFvalidationRule=SpreadsheetApp.newDataValidation().requireRewaminList(colFvalidationRange.build();
activeCell.offset(0,1).setDataValidation(colFvalidationRule);
}
}
}
//填充G列数据验证
if(activeCell.getColumn()==6&&activeCell.getRow()>1){
offset(0,1).clearDataValidations();
var colGIndex=colGdata[0].indexOf(activeCell.getValue())+2;
if(colGIndex!=0){
如果(activeCell.getValue()!=“”){
var colGvalidationRange=colGss.getRange(4,colGIndex,colGss.getLastRow()-1);
var colGvalidationRule=SpreadsheetApp.newDataValidation().RequireValidationList(colGvalidationRange.build();
activeCell.offset(0,1).setDataValidation(colGvalidationRule);
}
}
}
}
如果有多行和多列,则可能需要两个计数器才能显示整个阵列。根据阵列的宽度和高度,可以设置限制。如果数据有5行高:
//untested
for (var q = 0; q < 5; q++) /* counts to height one time for every entire count to
length*/
{
for(var i=0;i<colCdata.length;i++) /*counts to length before rolling back to
height */
{
foundCValues.push(colCdata[q][i]);
}
}
//未经测试
对于(var q=0;q<5;q++)/*计数到高度,每一次计数到
长度*/
{
对于(var i=0;使用console.log打印出一些中间值,或者使用vscode或chrome devtools和javascript调试器设置断点,单步执行代码并检查变量。这些都是需要学习的宝贵技能。不要认为我们有足够的信息来回答您的问题。我会详细阅读中的循环中的开始部分。这是什么您要查找的最终结果是什么?valueToFind
?colCdata.length
告诉您有多少项(从0到length-1索引)可用于colCdata
数组的第一个索引。因此,在colCdata[i]之外的任何位置使用索引i
都没有好处
。作为第二个位置下标没有任何意义,因为此时您不知道有多少项(如果有的话)可用。我想到的是您的行和列索引都混淆了。对于初学者,数组检索的语法是colCdata[row][col col]
——想象一下网格中的数据。在For循环中“stop”条件,colCdata.length
是网格中的行数。这使它看起来像是“i”在您的行中移动。但是在“匹配”检查中,valueToFind==colCdata[0][i]
,我被用来选择一个列。这至少是你的问题的一部分。如果你给出一个关于此数组中数据类型的示例,可能会有所帮助。好的。所有有用的注释。我在脚本中有很多日志记录,所以我一直在检查。我最终找到了[row][col],但就在几分钟前。因此,现在这更有意义了。我试图发布脚本的其余部分,但我认为这是不可能的