跳到主要内容

流程控制-遍历数组元素

对数组中的每个元素执行操作

问题背景

对数组中的每个元素执行操作。例如,给定一个数字数组,将每个值四舍五入到最接近的整数。

解决方案

消息拆分 节点可用于将数组中的每个元素拆分成单独的消息。它后面可以跟操作各个元素所需的节点, 比如本示例使用 范围映射 节点, 对接受到的小数进行按相近整数取整,然后跟 消息合并 节点,用于将拆分的单个元素重新组合成素组。

示例

注入 节点负责给 msg.payload 设置一个浮点数数组: [1.67,2.98,3.12,4.99,5.50]
消息拆分节点 负责将数组中的每个元素拆分成单独的消息。
范围映射节点 负责对接收到的小数进行按相近整数取整。
消息合并节点 负责将拆分的单个元素重新组合成数组。

operation-each-array-element

可以在此节点后连接一个 日志输出 节点,点击 注入 按钮时可以看到数组中的每个元素被拆分为单独的消息

示例JSON

[{"id":"3149f240.c0e25e","type":"inject","z":"e028a121bc4ae061","name":"浮点数数组","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[1.67,2.98,3.12,4.99,5.50]","payloadType":"json","x":160,"y":540,"wires":[["bd57baa6.00f998"]]},{"id":"bd57baa6.00f998","type":"split","z":"e028a121bc4ae061","name":"消息拆分","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"","x":340,"y":540,"wires":[["7ab9e9ed.d514b8","54e9d42b5fcb7f03"]]},{"id":"7ab9e9ed.d514b8","type":"range","z":"e028a121bc4ae061","minin":"0","maxin":"10","minout":"0","maxout":"10","action":"scale","round":true,"property":"payload","name":"取相近整数","x":530,"y":540,"wires":[["f26660ab.007b3"]]},{"id":"f26660ab.007b3","type":"join","z":"e028a121bc4ae061","name":"消息合并","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":700,"y":540,"wires":[["f9b5abac.f13828"]]},{"id":"f9b5abac.f13828","type":"debug","z":"e028a121bc4ae061","logName":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","logLevel":"info","dataType":"field","syntax":"mustache","template":"","x":890,"y":540,"wires":[]},{"id":"54e9d42b5fcb7f03","type":"debug","z":"e028a121bc4ae061","logName":"日志输出","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","logLevel":"info","dataType":"field","format":"handlebars","syntax":"mustache","template":"输出日志: payload 值为 {{payload}}","output":"str","x":510,"y":640,"wires":[]}]

运行结果

整个控制流就是对给定的 msg.payload 的浮点数数组:拆分-对单个元素取整-合并

operation-each-array-element-result