如何在NodeRED中用Function节点统计第4位为Yes的子数组数量
NodeRED Function节点统计指定条件子数组数量
需求说明
需要在NodeRED的Function节点中,统计外层数组里**第4个元素(数组索引为3,因为JS数组从0开始计数)**为"Yes"的子数组数量,并将该数量作为msg.payload返回。数据来自Google Sheet,每一行对应一个子数组,示例数据如下:
[ ["2024-03-30 9:25:38","2024-03-30T09:25:36.647Z","c9ea5f917bc74975b65dcbc656614308","Yes"], ["2024-03-30 11:07:15","2024-03-30T11:07:13.972Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-03-30 13:21:26","2024-03-30T13:21:24.432Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-02 17:05:23","2024-04-02T17:05:20.468Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-04-03 11:47:55","2024-04-03T11:47:47.277Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-05 19:19:38","2024-04-05T19:19:37.735Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-04-05 19:43:45","2024-04-05T19:43:43.067Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-04-06 8:24:01","2024-04-06T08:23:59.429Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-06 14:04:00","2024-04-06T14:03:59.291Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-06 18:13:37","2024-04-06T18:13:35.459Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-08 17:34:19","2024-04-08T17:34:17.239Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-08 21:47:34","2024-04-08T21:47:32.868Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-04-10 18:52:11","2024-04-10T18:52:10.138Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-04-11 18:01:17","2024-04-11T18:01:15.296Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-04-22 8:36:45","2024-04-22T08:36:42.964Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-04-22 8:37:23","2024-04-22T08:37:21.933Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-05-06 17:16:08","2024-05-06T17:16:06.432Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-05-09 14:39:28","2024-05-09T14:39:26.669Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-05-09 14:41:06","2024-05-09T14:41:05.029Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-05-11 18:48:12","2024-05-11T18:48:10.139Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-05-29 16:51:18","2024-05-29T16:51:16.836Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-05-30 16:07:36","2024-05-30T16:07:33.431Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-05-31 15:06:16","2024-05-31T15:06:15.495Z","c9ea5f917bc74975b65dcbc656614308","No"], ["2024-05-31 19:13:45","2024-05-31T19:13:44.829Z","0b0633067a0041a39ae7d0502d25303a","No"], ["2024-05-31 20:11:35","2024-05-31T20:11:34.247Z","c9ea5f917bc74975b65dcbc656614308","No"] ]
解决方案
简洁实现(数组filter方法)
在Function节点中输入以下代码,利用JS数组的filter方法快速筛选统计:
// 读取输入的数组数据 const sheetData = msg.payload; // 筛选并统计符合条件的子数组数量 const yesCount = sheetData.filter(row => row[3] === "Yes").length; // 将统计结果作为payload返回 msg.payload = yesCount; return msg;
代码说明
sheetData.filter(row => row[3] === "Yes"):遍历外层数组,筛选出所有子数组第4个元素为"Yes"的项.length:获取筛选后数组的长度,即符合条件的子数组总数- 最后将结果赋值给
msg.payload并返回
传统循环实现
如果偏好使用for循环,也可以采用以下写法:
const sheetData = msg.payload; let yesCount = 0; // 遍历外层数组 for (let i = 0; i < sheetData.length; i++) { // 检查当前子数组的第4个元素 if (sheetData[i][3] === "Yes") { yesCount++; } } msg.payload = yesCount; return msg;
内容的提问来源于stack exchange,提问作者Jon Griffith
相关产品推荐
相关产品推荐

