Google Apps JavaScript遍历多个数组

时间:2018-07-21 10:39:51

标签: javascript arrays google-apps-script

我相对较不熟悉Google表格的自定义功能,只学习javascript。 我正在尝试创建一个自定义函数,该函数将在数组中搜索一个值并返回一个字符串(类似于vlookup)。

我想要实现的是获取针对多个数组检查的值。我写了下面的内容,但是由于某种原因,它只检查数组的第一个元素(它确实起作用,但是由于某种原因而停止了,由于我认为我什么都没改变,所以我无法弄清原因)。

第二部分仍然比较棘手,如何使它对多个数组起作用...我当时在考虑创建一个数组: depots = [depot1,depot2 ...],然后将代码更改为“ depots.length for for loop,但即使1个数组也被证明是有问题的。

var depot1 = ["device1", "device2", "device3"];
var depot1 = ["device1", "device2", "device3"];

function _depot(value) {
  if (value) {
    var depotCheckCase = value.toUpperCase();

    for (var i = 0; i < depot1.length; i++) {
      if (depotCheckCase == depot1[i]) {
        return "Depot 1";
      } else {
        return false;
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

它仅检查第一个条目,因为在return / if的两个分支中都有else,因此无论如何,第一次循环迭代都会终止该函数。

相反,将return false;移到循环末尾。

其他一些问题:

  • 您两次声明相同的变量。您的第二个var depot1 = ...最终只是一个赋值(但是由于它要赋值的数组具有与第一个相同的条目,因此您可能不会注意到)。
  • 您正在强迫值将其检查为大写,但对要检查的条目却不这样做。

解决所有这些问题:

var depot1 = ["device1", "device2", "device3"];

function _depot(value) {
  if (value) {
    var depotCheckCase = value.toUpperCase();

    for (var i = 0; i < depot1.length; i++) {
      if (depotCheckCase == depot1[i].toUpperCase()) {
        return "Depot 1";
      }
    }
    return false;
  }
}

console.log(_depot("device2")); // "Depot 1"
console.log(_depot("device8")); // false

  

有什么主意如何将其与检查第二/第三阵列相结合?

您有两个选择:

  1. 其他循环(最简单)。
  2. 找到最长数组的长度,将其用作循环最大值,并在比较之前检查undefined。由于[n]大于或等于长度时数组上的n会给您undefined,因此您可以在进行toUpperCase之前进行检查。

这是第二个:

var depot1 = ["device1", "device2", "device3"];
var depot2 = ["device4", "device5"];
var depot3 = ["device6", "device7", "device8", "device9"];

function _depot(value) {
  if (value) {
    var depotCheckCase = value.toUpperCase();
    var max = Math.max(depot1.length, depot2.length, depot3.length);
    var entry;
    for (var i = 0; i < max; i++) {
      entry = depot1[i];
      if (entry !== undefined && depotCheckCase === entry.toUpperCase()) {
        return "Depot 1";
      }
      entry = depot2[i];
      if (entry !== undefined && depotCheckCase === entry.toUpperCase()) {
        return "Depot 2";
      }
      entry = depot3[i];
      if (entry !== undefined && depotCheckCase === entry.toUpperCase()) {
        return "Depot 3";
      }
    }
    return false;
  }
}

console.log(_depot("device2"));  // "Depot 1"
console.log(_depot("device8"));  // "Depot 3"
console.log(_depot("device5"));  // "Depot 2"
console.log(_depot("device10")); // false

您可以给自己一个数组数组,然后循环执行,而不必重复逻辑。我把它留给读者作为练习。 :-)