Javascript 计算作为参数传递给Google电子表格中自定义函数的条件
我想创建一个自定义函数,它接受条件作为参数,就像FILTER()函数那样,例如:Javascript 计算作为参数传递给Google电子表格中自定义函数的条件,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我想创建一个自定义函数,它接受条件作为参数,就像FILTER()函数那样,例如: LARGEST_STREAK(Data, Winnings > 0) LARGEST_STREAK(Data, Winnings > 0, Sports = "Football") (数据、奖金和运动被命名为范围) 你有这样做的函数的例子吗?最好是FILTER()函数的源代码,但我甚至不确定内置函数背后运行的是Javascript。自定义函数接收的参数不是范围,而是Javascript值或双数组。例如
LARGEST_STREAK(Data, Winnings > 0)
LARGEST_STREAK(Data, Winnings > 0, Sports = "Football")
(数据、奖金和运动被命名为范围)
你有这样做的函数的例子吗?最好是FILTER()函数的源代码,但我甚至不确定内置函数背后运行的是Javascript。自定义函数接收的参数不是范围,而是Javascript值或双数组。例如,
customfunction(A1:A3,B2:D2)
将接收参数[[x],[y],[z]
和[[x,y,z]
,其中x,y,z是存储在这些单元格中的值
特别是,数组可以是布尔数组,然后可以在JavaScript自己的过滤器方法中使用。以下是作为自定义函数的过滤器
函数的重新实现:
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
wrapper:
=arrayformula(myfilter(A1:C10, D1:D10 > 5))
原因是没有包装器,D1:D10>5
返回与D1>5
相同的结果。内置的FILTER
函数不需要像wrapper这样的函数,因为已经知道它是一个处理数组的函数 我不确定何时使用“conditions.length==1”范围。还有多个条件,条件数组是什么样子的?过滤器中的条件数组必须是一维的:行或列。长度==1表示一行,[[x,y,z]]
。否则它是一列,[[x],[y],[z]]
。如果您有多个条件,您将有返回条件[0][i]&更多条件[0][i]代码>。。。