Javascript 从列中获取数组值

Javascript 从列中获取数组值,javascript,arrays,for-loop,google-apps-script,google-sheets,Javascript,Arrays,For Loop,Google Apps Script,Google Sheets,如果我的函数得到一列的值,比如列I,我怎么能告诉它取而代之的是右边(J)的列的值而不是I:K 函数头搜索(e、activeCell、activeRow、activeCol、data、mode、secMode、terMode){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var-foundValues=[]; var forConR=data.length; var forConC=数据[0]。长度; Logger.log(“数据[0]=”+数

如果我的函数得到一列的值,比如列I,我怎么能告诉它取而代之的是右边(J)的列的值而不是I:K

函数头搜索(e、activeCell、activeRow、activeCol、data、mode、secMode、terMode){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var-foundValues=[];
var forConR=data.length;
var forConC=数据[0]。长度;
Logger.log(“数据[0]=”+数据[0]);
for(var i=1;i-1){
if(activeCell.getValue()==数据[0][j]){
foundValues.push(数据[i][j]);
}
}else if(activeCell!=''&&activeCol==3&&data[0][j].indexOf(mode)>-1&&data[i][j]!=“”){
foundValues.push(数据[i][j]);
Logger.log(“foundValues=“+foundValues”);
}
}
}
如果(foundValues!=“”){
var validationRule=SpreadsheetApp.newDataValidation().requireRewageInList(foundValues.build();
activeCell.offset(0,1).setDataValidation(validationRule);
}
}
编辑:

我尝试添加
foundValues.push(数据[I][j+1])
将我从第一列(I)中删除,但随后当然会添加我也不想要的下一列(L)。我只是不知道如何隔离列索引。一旦我弄明白了这一点,我确信只需在右边的列中添加
+1
OFFSET

有两个
for
循环,其中一个循环遍历所有行,第二个循环遍历所有数据列
  • 取而代之的是只检索一列数据,而不是遍历所有列
  • 您可以通过简单地删除第二个for循环,而不是硬编码
    j
  • 如果在范围的第二列中,则列索引应为
    1
    (因为数组索引以
    0
    开头)
  • 在不深入了解
    if
    条件的用途的情况下,并假设您仅使用它们来评估第J列中的值,您可以按照以下方式修改代码:
。。。
for(var i=1;i-1){
if(activeCell.getValue()==数据[0][j]){
foundValues.push(数据[i][j]);
}
}else if(activeCell!=''&&activeCol==3&&data[0][j].indexOf(mode)>-1&&data[i][j]!=“”){
foundValues.push(数据[i][j]);
Logger.log(“foundValues=“+foundValues”);
} 
}
...

我重新排列了我的
if
语句,并添加了一个语句以隔离所选的“模式”列(B)。此时,我可以添加
j+1
,为下一个数据验证选择获取以下列值

函数头搜索(e、activeCell、activeRow、activeCol、data、mode、secMode、terMode){
var-foundValues=[];
var forConR=data.length;
var forConC=数据[0]。长度;
如果(activeCell!=“”){
for(var i=1;i-1&&data[i][j]!=''&&data[0][modeCol+1].indexOf(mode)>-1){
foundValues.push(数据[i][modeCol+1]);
}else if(activeCol==4&&data[0][j].indexOf(mode)>-1&&data[i][j]!=“”&&data[0][modeCol+2].indexOf(mode)>-1){
foundValues.push(数据[i][modeCol+2]);
}
}
}
}
如果(foundValues!=“”){
var validationRule=SpreadsheetApp.newDataValidation().requireRewageInList(foundValues.build();
activeCell.offset(0,1).setDataValidation(validationRule);
}
}

非常感谢您的回答。在稍微弄乱了一下之后,我决定我确实需要在列之间循环,以发现哪个列与我的选择相匹配。但是你的回答让我对我所做的事情有了一点不同的看法。非常感谢。
...
for (var i = 1; i < forConR; i++) {
  var j = 1;
  if (activeCell != "" && activeCol == 2 && data[0][j].indexOf(mode) > -1) {
    if (activeCell.getValue() == data[0][j]) {
      foundValues.push(data[i][j]);
    }
  } else if (activeCell != "" && activeCol == 3 && data[0][j].indexOf(mode) > -1 && data[i][j] != "") {
    foundValues.push(data[i][j]);
    Logger.log("foundValues = " + foundValues);
  } 
}
...