Node-RED:Рецепты/Как выполнить действие с каждым элементом массива: различия между версиями
Myagkij (обсуждение | вклад) |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
{{Node-RED/Панель перехода}} | {{Node-RED/Панель перехода}} | ||
{{Перевод от Сubewriter}} | {{Перевод от Сubewriter}} | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Как выполнить действие с каждым элементом массива<ref>[https://cookbook.nodered.org/basic/operate-on-array cookbook.nodered.org - Perform an operation on each element in an array]</ref>= | =Как выполнить действие с каждым элементом массива<ref>[https://cookbook.nodered.org/basic/operate-on-array cookbook.nodered.org - Perform an operation on each element in an array]</ref>= | ||
Строка 33: | Строка 30: | ||
=См.также= | =См.также= | ||
{{ads}} | |||
=Внешние ссылки= | =Внешние ссылки= | ||
Версия от 10:06, 7 августа 2022
Как выполнить действие с каждым элементом массива[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» снова собрать их в одно сообщение.
См.также
Внешние ссылки