谷歌脚本功能比较在控制台中工作但不在工作表中的两个范围

问题描述:

在Google表格中扩展两个用户范围,这可以在控制台中工作,但在工作表中不起作用。有人可以解释为什么吗?谷歌脚本功能比较在控制台中工作但不在工作表中的两个范围

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

当传递的范围内,以自定义表函数,它得到要么

  • 单个值,如果该范围包括一个细胞,或
  • 双阵列的其他方式。即使范围是一维:例如,对于一个行范围,您可以得到[[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是多余的在这里,所以我删除它)