Node-RED:Рецепты/Как выполнить действие с каждым элементом массива
Черновик |
Как выполнить действие с каждым элементом массива[1]
Проблема
Вам нужно выполнить какое-то действие с каждым элементом массива. К примеру, у вас есть массив чисел, и вам нужно округлить каждое его число до ближайшего целого.
Решение
Сначала воспользуйтесь нодой «Split», чтобы отправить сообщение каждому элементу массива. После ноды «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» снова собрать их в одно сообщение.