Google脚本可以比较在控制台中工作但不在工作表中的两个范围

时间:2016-06-14 10:02:30

标签: google-apps-script google-sheets

在Google表格中区分两个用户范围,这在控制台中有效,但在工作表中不起作用。有人可以解释一下原因吗?

function DIFF(a, b) {
  return a.filter(function(v){
     return b.indexOf(v) === -1 ? true : false;
  }).length
}

1 个答案:

答案 0 :(得分:0)

将范围传递给自定义表单功能时,它会获得

  • 单个值,如果范围包含一个单元格,或
  • 否则为双数组。即使范围是一维的:例如,列值范围为[[1], [2], [3]],行范围为[[1, 2, 3]]

您的DIFF函数假定参数是普通的值数组。因此,您需要展平双数组,或将单个值转换为数组。这就是函数flatten的作用。

function flatten(arg) {
  if (arg.constructor === Array) {
    return arg.reduce(function(a, b) {
      return a.concat(b);
    });
  }
  else {
    return [arg];
  }
}

然后DIFF可以是这样的:

function DIFF(a, b) {
  a = flatten(a);
  b = flatten(b);
  return a.filter(function(v) {
     return b.indexOf(v) === -1;
  }).length
}

(旁白:三元运算符: ? true : false在这里是多余的,所以我删除了它。)