Array.indexOf(value) - 在GAS中没有给出正确的索引号

时间:2014-02-21 10:49:46

标签: google-apps-script google-sheets google-spreadsheet-api

在GAS中,

Code.gs
function myFunction() {
  var sheet2 = SpreadsheetApp.getActivesheet();
  var firstset = sheet2.getRange('B1:B10').getValues();
  Logger.log(firstset)
  var found = firstset.indexOf('[re]')
  Logger.log(found)
}

在Google电子表格范围B1:B10中,

B1  we
B2  we
B3  re
B4  ef
B5  ge
B6  er
B7  fe
B8  th
B9  rg
B10 pq

代码的答案应该是2,但是,Log显示-1(不匹配)。任何帮助

Screenshot of Logger.log

3 个答案:

答案 0 :(得分:3)

在一个简单的for循环中:

function myFunction() {
  var sheet2 = SpreadsheetApp.getActiveSheet();
  var firstset = sheet2.getRange('B1:B10').getValues();
  for(var n in firstset){
    if(firstset[n][0]=='re'){break}
  }
  Logger.log(n);
}

答案 1 :(得分:0)

如果您将数据放在一行而不是列中,则代码可以像这样使用:

function myFunction() {
  var sheet2 = SpreadsheetApp.getActivesheet();
  var firstset = sheet2.getRange('A1:J1').getValues();
  Logger.log(firstset)
  var found = firstset[0].indexOf('[re]')
  Logger.log(found)
}

indexOf - 只能在一维数组中搜索 - 因此在我的示例中使用firstset[0].indexOf('[re]')

.getValues() - 总是返回二维数组,即使只有一行或一列。

答案 2 :(得分:0)

这对我有用。

这是一种修改后的方法,原件并没有给我正确的结果。

Array.prototype.findIndex = function(search)
{
  if(search == "") return -1;
  for(var t = 0; t < this.length; t++)
  {
    if(this[t].search(search) >=0)
    {break}
  }
  return t-1;
}

<强> USAGE

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var index = fruits.findIndex("Apple");
//"Apple" is located at position 2 in the array.   
Logger.log("Index of 'Apple' is:  " + index);

注意

使用此方法按名称获取工作表列的索引时,将索引增加1以使用sheet.getRange(rowIndex,columnIndex)。

var range = sheet.getRange(row, (index+1));