Node-RED:Рецепты/Как выполнить действие с каждым элементом массива

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 46400 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Как выполнить действие с каждым элементом массива[1]

Проблема

Вам нужно выполнить какое-то действие с каждым элементом массива. К примеру, у вас есть массив чисел, и вам нужно округлить каждое его число до ближайшего целого.

Решение

Сначала воспользуйтесь нодой «Split», чтобы отправить сообщение каждому элементу массива. После ноды «Split» можно поставить ноды, необходимые для обработки каждого элемента массива, а в конце поставить ноду «Join», чтобы снова собрать все эти элементы в один массив.

Пример

Nodered recipe operate-on-array.png
[{"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» снова собрать их в одно сообщение.

См.также

Внешние ссылки

  1. cookbook.nodered.org - Perform an operation on each element in an array