谷歌脚本功能比较在控制台中工作但不在工作表中的两个范围
问题描述:
在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
是多余的在这里,所以我删除它)