我想创建一个自定义函数,它像FILTER()函数那样接受条件,例如:
LARGEST_STREAK(Data, Winnings > 0)
LARGEST_STREAK(Data, Winnings > 0, Sports = "Football")(数据、奖金和体育项目被命名为范围)。
你有这样做的函数的例子吗?最好的方法是FILTER()函数的源代码,但我甚至不确定是否Javascript运行在buit函数后面。
发布于 2016-04-22 16:57:47
自定义函数接收的参数不是范围,它们是JavaScript值或双数组。例如,customfunction(A1:A3, B2:D2)将接收参数[[x], [y], [z]]和[[x,y,z]],其中x、y、z是存储在这些单元格中的值。
特别是,数组可以是布尔数组,然后可以在JavaScript自己的filter方法中使用这些数组。下面是FILTER函数作为自定义函数的重新实现:
function myFilter(arr, conditions) {
if (conditions.length == 1) {
return arr.map(function (row) {
return row.filter(function (_, i) {
return conditions[0][i];
});
});
}
else {
return arr.filter(function (_, i) {
return conditions[i][0];
});
}
}要将其用于比较,需要arrayformula包装器:
=arrayformula(myfilter(A1:C10, D1:D10 > 5))原因是没有包装器,D1:D10 > 5返回与D1 > 5相同的内容。内置的FILTER函数不需要这样的包装器,因为已知它是一个与数组一起工作的函数。
https://stackoverflow.com/questions/36797397
复制相似问题