我想创建一个自定义函数,接受条件作为 FILTER()函数的参数,例如:
LARGEST_STREAK(Data, Winnings > 0)
LARGEST_STREAK(Data, Winnings > 0, Sports = "Football")
(数据,奖金和运动被命名为范围)。
您是否有这样做的功能示例?最好的是FILTER()函数的源代码,但我甚至不确定Javascript是否为buit-in函数运行。
答案 0 :(得分:1)
自定义函数接收的参数不是范围,它们是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
函数不需要诸如包装器,因为它已经知道是一个与数组一起工作的函数。