【问题标题】:node red filter array with array带数组的节点红色过滤器数组
【发布时间】:2021-07-22 07:35:23
【问题描述】:

我有这个节点红色测试设置,我想用一个数组过滤一个对象数组。 问题是,测试设置返回原始数组的未过滤副本。 我已经发布了另一个关于此的问题,cmets 建议我做的一切都是正确的。这个问题被主持人关闭了。但我的问题仍未解决。

谁能告诉我哪里出错了?

输入数组payload是一个元素数组:

[{"altname":"melon"},{"altname":"cherry"},{"altname":"banana"}]

过滤器数组exclude有2个元素:

[["melon"],["banana"]]

我希望输出数组只有 1 个元素:

[{"altname":"cherry"}]

我的设置:

[{"id":"b4b2e91f.8e4368","type":"inject","z":"42edc0b9.7ba91","name":"","props":[{"p":"payload"},{"p":"exclude","v":"[[\"melon\"],[\"banana\"]]","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"altname\":\"melon\"},{\"altname\":\"cherry\"},{\"altname\":\"banana\"}]","payloadType":"json","x":1650,"y":320,"wires":[["3fbdbc18.951c94"]]},{"id":"3fbdbc18.951c94","type":"function","z":"42edc0b9.7ba91","name":"cycle counter","func":"\n\nmsg.payload = msg.payload.filter(el => !msg.exclude.includes(el.altname));\n\nnode.warn(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1810,"y":320,"wires":[["ab67374c.c64458"]]},{"id":"ab67374c.c64458","type":"debug","z":"42edc0b9.7ba91","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2040,"y":300,"wires":[]}]

除了下面的评论之外,还有我的设置作为描述:

注入节点:

msg.payload = [{"altname":"melon"},{"altname":"cherry"},{"altname":"banana"}]
msg.exclude = [["melon"],["banana"]]

功能节点:

msg.payload = msg.payload.filter(el => !msg.exclude.includes(el.altname));
node.warn(msg.payload);
return msg;

【问题讨论】:

    标签: arrays filter node-red


    【解决方案1】:

    问题在于您的排除数组是二维数组而不是简单的单深度数组。

    msg.exclude 应该是:

    ["melon","banana"]
    

    对于代码你必须正常工作。

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多