• V
 

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

问题

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

解决方案

可以使用 Split 节点为数组中的每个元素发送消息。后面可以跟上用于操作单个元素所需的节点,然后再跟一个 Join 节点将它们重新组合成一个数组。

示例

[{"id":"3149f240.c0e25e","type":"inject","z":"ac14500e.2c57d","name":"Array of decimals","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":"Split array","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":"Round value","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 节点能够正确地重新组装原始消息。