查找指定数组中元素的索引

Finding index of an element in a specified array

我正在制作一个 google 工作表应用程序脚本,我想在其中检查一个单元格中的值是否在值数组中,然后找到索引是什么,以便我可以指导我的对该单元格起作用。

我现在将我的数组放在一个名为 distArray 的变量中,我想检查 "id" 是否在该数组中。

下面是更好可视化的代码:

function logs() {
  let app = SpreadsheetApp
  let dest = app.getActiveSpreadsheet().getSheetByName("Baza Danych");
  let lastrow = dest.getLastRow();

  let destArr = dest.getRange(2, 1, lastrow).getValues();
  let id = app.getActiveSpreadsheet().getSheetByName("Zgloszenia").getRange(6, 2).getValue();
  let position = destArr.indexOf(id);

  Logger.log(id)
  Logger.log(destArr)
  Logger.log(position)
}

然后here is the output我明白了。

我的问题是,无论 "id" 的值是什么,索引要么是 -1 要么是 0 意味着该值要么不在数组中,要么在第一个单元格。

尝试在行尾添加.flat()

let destArr = dest.getRange(2, 1, lastrow).getValues();

这样:

let destArr = dest.getRange(2, 1, lastrow).getValues().flat();

解释:

方法getValues()给你一个二维数组[[1],[2],[3],...]

flat()方法将二维数组转换为普通平面数组[1,2,3,...]

之后您将能够使用 array.indexOf(element) 获取数组中元素的索引。

描述

如果您不想知道数组的哪个元素包含您要查找的值,Yuri 的解决方案就是一个很好的例子。但是,如果您需要知道数组的哪一行包含值,以下示例显示了如何搜索二维数组。

脚本

function find() {
  try {
    let a = [['a','b'],['c','d'],['e','f'],['g','h']];
    let b = "f";
    let c = a.findIndex( d => d.indexOf(b) >= 0 );
    console.log("c = "+c);
  }
  catch(err) {
    console.log(err);
  }
}

7:51:23 AM  Notice  Execution started
7:51:24 AM  Info    c = 2
7:51:23 AM  Notice  Execution completed

参考