• V
 

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

问题

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

解决方案

Split 节点可用于为数组中的每个元素发送一条消息。它可以后面跟着需要对单个元素进行操作的节点,然后通过 Join 节点将它们重新组合成一个单一的数组。

示例

[{"id":"3149f240.c0e25e","type":"inject","z":"ac14500e.2c57d","name":"十进制数组","topic":"","payload":"[1.67,2.98,3.12,4.99,5.50]","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":960,"wires":[["bd57baa6.00f998"]]},{"id":"bd57baa6.00f998","type":"split","z":"ac14500e.2c57d","name":"拆分数组","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"","x":200,"y":1020,"wires":[["7ab9e9ed.d514b8"]]},{"id":"7ab9e9ed.d514b8","type":"range","z":"ac14500e.2c57d","minin":"0","maxin":"10","minout":"0","maxout":"10","action":"scale","round":true,"property":"payload","name":"四舍五入值","x":350,"y":1020,"wires":[["f26660ab.007b3"]]},{"id":"f26660ab.007b3","type":"join","z":"ac14500e.2c57d","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":"false","timeout":"","count":"","reduceRight":false,"x":490,"y":1020,"wires":[["f9b5abac.f13828"]]},{"id":"f9b5abac.f13828","type":"debug","z":"ac14500e.2c57d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":550,"y":1080,"wires":[]}]

讨论

在其他编程环境中,这项任务通常是通过对数组的元素创建一个循环来实现的。

在 Node-RED 中,实现相同目标的方法是将包含数组的单条消息转换为可以单独处理的消息流,最后将它们重新组合回一条消息。

Split / Join 节点对常常一起使用来实现这一点。Split 节点为流中的每条消息添加 msg.parts 属性,这使得 Join 节点能够正确地重新组装原始消息。