[{"data":1,"prerenderedAt":1168},["ShallowReactive",2],{"node-red-\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop":3},{"id":4,"title":5,"body":6,"description":1160,"extension":1161,"meta":1162,"navigation":1163,"path":1164,"seo":1165,"stem":1166,"__hash__":1167},"nodeRed\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop.md","How to implement loops in Node-RED flows",{"type":7,"value":8,"toc":1153},"minimark",[9,17,21,24,29,40,71,74,78,81,86,90,93,284,287,340,345,348,363,372,378,496,499,543,546,549,570,573,606,618,625,664,667,671,683,688,816,835,846,849,853,862,865,889,897,988,991,994,1087,1090,1093,1140,1146,1149],[10,11,13],"h1",{"id":12},"",[14,15],"binding",{"value":16},"meta.title",[18,19,20],"p",{},"Handling repetitive tasks is a common challenge in automation and data processing. Whether you need to iterate over large datasets, perform calculations, or execute operations based on conditions multiple times, using loops can significantly enhance efficiency and scalability.",[18,22,23],{},"In this document, we’ll explore how to replicate different types of loops that are essential in various contexts. We’ll discuss their applications and provide examples to help you effectively implement them in Node-RED.",[25,26,28],"h2",{"id":27},"what-is-a-loop","What is a Loop?",[18,30,31,32,39],{},"A ",[33,34,38],"a",{"href":35,"rel":36},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FGuide\u002FLoops_and_iteration",[37],"nofollow","loop"," is a programming construct that allows you to execute a block of code repeatedly until a certain condition is met. Different types of loops are suited to different scenarios, depending on how and when you want the code to repeat:",[41,42,43,51,57],"ul",{},[44,45,46,50],"li",{},[47,48,49],"strong",{},"For Loop",": Executes a block of code a specific number of times. This is useful when you know in advance how many times you need to iterate, such as iterating through a range of numbers or items in a list. It's also known as a fixed number loop.",[44,52,53,56],{},[47,54,55],{},"While Loop",": Repeats a block of code as long as a specified condition is true. This type of loop is useful when you don’t know how many times the loop will need to run beforehand. The loop continues executing until the condition becomes false.",[44,58,59,62,63,66,67,70],{},[47,60,61],{},"For...of \u002F ForEach Loop",": These loops are used to iterate over iterable objects such as arrays or maps. They allow you to access each element in a collection. The ",[47,64,65],{},"for...of"," loop is used specifically for iterables, while ",[47,68,69],{},"forEach"," is a method available on arrays that applies a function to each element.",[18,72,73],{},"Each type of loop serves a different purpose and can be chosen based on the requirements of the task at hand.",[25,75,77],{"id":76},"implementing-loops-in-node-red","Implementing Loops in Node-RED",[18,79,80],{},"In this section, we’ll explore how to implement loops in Node-RED. First, we’ll demonstrate how to achieve looping with core nodes. Then, we’ll show how to accomplish similar tasks using custom nodes. We’ll also cover some essential operations typically performed using loops, providing practical examples to enhance your Node-RED flows.",[82,83,85],"h3",{"id":84},"implementing-loops-in-node-red-with-core-nodes","Implementing Loops in Node-RED with Core Nodes",[87,88,55],"h4",{"id":89},"while-loop",[18,91,92],{},"To demonstrate a while loop in Node-RED, we’ll create a flow that appends random characters to a string until it contains the character \"Z\". This example will help you understand how to simulate a while loop using Node-RED's core nodes.",[94,95,96,103,125,148,245,258],"ol",{},[44,97,98,99,102],{},"Drag an ",[47,100,101],{},"Inject"," node onto the canvas. This node will trigger the start of the loop.",[44,104,105,106,109,110,114,115,118,119,121,122,124],{},"Add a ",[47,107,108],{},"Change"," node to initialize the string variable. Configure it to set ",[111,112,113],"code",{},"msg.i"," to an empty string (",[111,116,117],{},"\"\"","). Connect the ",[47,120,101],{}," node to this ",[47,123,108],{}," node.",[44,126,127,128,131,132,134,135,138,139,142,143,145,146,124],{},"Place a ",[47,129,130],{},"Switch"," node on the canvas. Set it to check if ",[111,133,113],{}," contains the character \"Z\" (",[111,136,137],{},"msg.i.includes('Z')","). Add an additional rule for when this condition is not met (",[111,140,141],{},"otherwise","). Connect the output of the ",[47,144,108],{}," node to the input of the ",[47,147,130],{},[44,149,105,150,153,154,229,230,232,233,235,236,238,239,241,242,244],{},[47,151,152],{},"Function"," node to append a random uppercase letter to the string. Use the following JavaScript code:\n",[155,156,160],"pre",{"className":157,"code":158,"language":159,"meta":12,"style":12},"language-javascript shiki shiki-themes github-light github-dark","msg.i += String.fromCharCode(65 + Math.floor(Math.random() * 26)); \u002F\u002F Append a random uppercase letter\nreturn msg;\n","javascript",[111,161,162,220],{"__ignoreMap":12},[163,164,167,171,175,178,182,185,189,192,195,198,201,204,207,210,213,216],"span",{"class":165,"line":166},"line",1,[163,168,170],{"class":169},"sVt8B","msg.i ",[163,172,174],{"class":173},"szBVR","+=",[163,176,177],{"class":169}," String.",[163,179,181],{"class":180},"sScJk","fromCharCode",[163,183,184],{"class":169},"(",[163,186,188],{"class":187},"sj4cs","65",[163,190,191],{"class":173}," +",[163,193,194],{"class":169}," Math.",[163,196,197],{"class":180},"floor",[163,199,200],{"class":169},"(Math.",[163,202,203],{"class":180},"random",[163,205,206],{"class":169},"() ",[163,208,209],{"class":173},"*",[163,211,212],{"class":187}," 26",[163,214,215],{"class":169},")); ",[163,217,219],{"class":218},"sJ8bj","\u002F\u002F Append a random uppercase letter\n",[163,221,223,226],{"class":165,"line":222},2,[163,224,225],{"class":173},"return",[163,227,228],{"class":169}," msg;\n","\nConnect this ",[47,231,152],{}," node to the second output of the ",[47,234,130],{}," node (where the condition is ",[111,237,113],{}," does not contain \"Z\"). Then, connect the output of this ",[47,240,152],{}," node back to the input of the ",[47,243,130],{}," node to repeat the process.",[44,246,247,248,251,252,254,255,257],{},"Drag a ",[47,249,250],{},"Debug"," node onto the canvas and connect it to the second output of the ",[47,253,130],{}," node. This node will display the current value of ",[111,256,113],{}," in the debug panel.",[44,259,260,261,263,264,267,268,271,272,274,275,277,278,280,281,283],{},"Add another ",[47,262,108],{}," node to signal completion. Configure it to set ",[111,265,266],{},"msg.payload"," to ",[111,269,270],{},"\"completed\"",". Connect this ",[47,273,108],{}," node to the first output of the ",[47,276,130],{}," node (where ",[111,279,113],{}," contains \"Z\"), and then link it to another ",[47,282,250],{}," node to show the completion message.",[18,285,286],{},"The flow will continuously append random letters to the string and print the value in the debug panel until the string contains \"Z\". Once the condition is met, the flow will print a \"completed\" message and terminate the loop.",[155,288,292],{"className":289,"code":290,"language":291,"meta":12,"style":12},"language-mermaid shiki shiki-themes github-light github-dark","graph TD\n    A[\"Inject Node\u003Cbr>Triggers the start of the loop\"] --> B[\"Change Node\u003Cbr>Initialize String\u003Cbr>Sets msg.i = ' '\"]\n    B --> C[\"Switch Node\u003Cbr>Check if msg.i contains 'Z'\"]\n    C -->|\"msg.i contains 'Z'\"| D[\"Change Node\u003Cbr>Set msg.payload to 'completed'\"]\n    D --> E[\"Debug Node\u003Cbr>Display Completion Message\"]\n    C -->|\"msg.i does not contain 'Z'\"| F[\"Function Node\u003Cbr>Append Random Character\u003Cbr>Sets msg.i += random uppercase letter\"]\n    F --> C\n    F --> G[\"Debug Node\u003Cbr>Display Current String\"]\n","mermaid",[111,293,294,299,304,310,316,322,328,334],{"__ignoreMap":12},[163,295,296],{"class":165,"line":166},[163,297,298],{},"graph TD\n",[163,300,301],{"class":165,"line":222},[163,302,303],{},"    A[\"Inject Node\u003Cbr>Triggers the start of the loop\"] --> B[\"Change Node\u003Cbr>Initialize String\u003Cbr>Sets msg.i = ' '\"]\n",[163,305,307],{"class":165,"line":306},3,[163,308,309],{},"    B --> C[\"Switch Node\u003Cbr>Check if msg.i contains 'Z'\"]\n",[163,311,313],{"class":165,"line":312},4,[163,314,315],{},"    C -->|\"msg.i contains 'Z'\"| D[\"Change Node\u003Cbr>Set msg.payload to 'completed'\"]\n",[163,317,319],{"class":165,"line":318},5,[163,320,321],{},"    D --> E[\"Debug Node\u003Cbr>Display Completion Message\"]\n",[163,323,325],{"class":165,"line":324},6,[163,326,327],{},"    C -->|\"msg.i does not contain 'Z'\"| F[\"Function Node\u003Cbr>Append Random Character\u003Cbr>Sets msg.i += random uppercase letter\"]\n",[163,329,331],{"class":165,"line":330},7,[163,332,333],{},"    F --> C\n",[163,335,337],{"class":165,"line":336},8,[163,338,339],{},"    F --> G[\"Debug Node\u003Cbr>Display Current String\"]\n",[341,342],"render-flow",{":height":343,"flow":344},"200","W3siaWQiOiJlOTBkYzJlNTBlNDA4OTZjIiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJuYW1lIjoiV2hpbGUgTG9vcCIsInN0eWxlIjp7ImxhYmVsIjp0cnVlfSwibm9kZXMiOlsiY2Y2ZWJmMDJkMDBlYWNhNiIsIjY5NmQ4OWFhNDA1MGNkMTMiLCIwZTJkOWYwNDQ3Y2Y2MjI2IiwiYmI2MDc0Y2RmNDM5OGNiNiIsImUxOTMwNGFiMzExOTkzMTUiLCJjNDY3NTA5YzY2NmVlNDAwIiwiMDZiYjA4ZTNmMGQ3ODg4YSJdLCJ4IjozNCwieSI6MTM5LCJ3IjoxMDkyLCJoIjoyNDJ9LHsiaWQiOiJjZjZlYmYwMmQwMGVhY2E2IiwidHlwZSI6InN3aXRjaCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6ImU5MGRjMmU1MGU0MDg5NmMiLCJuYW1lIjoiRG9lcyB0aGUgbXNnLmkgY29udGFpbnMgWiIsInByb3BlcnR5IjoiaSIsInByb3BlcnR5VHlwZSI6Im1zZyIsInJ1bGVzIjpbeyJ0IjoiY29udCIsInYiOiJaIiwidnQiOiJzdHIifSx7InQiOiJlbHNlIn1dLCJjaGVja2FsbCI6InRydWUiLCJyZXBhaXIiOmZhbHNlLCJvdXRwdXRzIjoyLCJ4Ijo1OTAsInkiOjI0MCwid2lyZXMiOltbImM0Njc1MDljNjY2ZWU0MDAiXSxbIjBlMmQ5ZjA0NDdjZjYyMjYiLCIwNmJiMDhlM2YwZDc4ODhhIl1dfSx7ImlkIjoiNjk2ZDg5YWE0MDUwY2QxMyIsInR5cGUiOiJkZWJ1ZyIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6ImU5MGRjMmU1MGU0MDg5NmMiLCJuYW1lIjoiRW5kIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoidHJ1ZSIsInRhcmdldFR5cGUiOiJmdWxsIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4IjoxMDMwLCJ5IjoxODAsIndpcmVzIjpbXX0seyJpZCI6IjBlMmQ5ZjA0NDdjZjYyMjYiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiJlOTBkYzJlNTBlNDA4OTZjIiwibmFtZSI6Ik91dHB1dCBcImlcIiIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6ImkiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo5MDAsInkiOjI2MCwid2lyZXMiOltdfSx7ImlkIjoiYmI2MDc0Y2RmNDM5OGNiNiIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiJlOTBkYzJlNTBlNDA4OTZjIiwibmFtZSI6IlN0YXJ0IiwicHJvcHMiOlt7InAiOiJwYXlsb2FkIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6IiIsInRvcGljIjoiIiwicGF5bG9hZCI6IltcImhlbGxvXCIsXCJydW5cIixcIndoeVwiXSIsInBheWxvYWRUeXBlIjoianNvbiIsIngiOjEzMCwieSI6MjQwLCJ3aXJlcyI6W1siZTE5MzA0YWIzMTE5OTMxNSJdXX0seyJpZCI6ImUxOTMwNGFiMzExOTkzMTUiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiZTkwZGMyZTUwZTQwODk2YyIsIm5hbWUiOiJpbml0aWxpemVkIGkgd2l0aCBlbXB0eSBzdHJpbmciLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJpIiwicHQiOiJtc2ciLCJ0byI6IiIsInRvdCI6InN0ciJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4IjozMjAsInkiOjI0MCwid2lyZXMiOltbImNmNmViZjAyZDAwZWFjYTYiXV19LHsiaWQiOiJjNDY3NTA5YzY2NmVlNDAwIiwidHlwZSI6ImNoYW5nZSIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6ImU5MGRjMmU1MGU0MDg5NmMiLCJuYW1lIjoiaWYgbm90IFNldCBwYXlsb2FkIHRvIFwiY29tcGxldGVkXCIiLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJwYXlsb2FkIiwicHQiOiJtc2ciLCJ0byI6IkNvbXBsZXRlZCIsInRvdCI6InN0ciJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo3OTAsInkiOjE4MCwid2lyZXMiOltbIjY5NmQ4OWFhNDA1MGNkMTMiXV19LHsiaWQiOiIwNmJiMDhlM2YwZDc4ODhhIiwidHlwZSI6ImZ1bmN0aW9uIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiZTkwZGMyZTUwZTQwODk2YyIsIm5hbWUiOiJBcHBlbmQgUmFuZG9tIExldHRlciIsImZ1bmMiOiIvLyBhZGQgQVNDSUkgY2hhciBmcm9tIDMyIHRvIDEyNlxubXNnLmkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShNYXRoLnJhbmRvbSgpKjI2ICsgNjUpO1xucmV0dXJuIG1zZzsiLCJvdXRwdXRzIjoxLCJ0aW1lb3V0IjoiIiwibm9lcnIiOjAsImluaXRpYWxpemUiOiIiLCJmaW5hbGl6ZSI6IiIsImxpYnMiOltdLCJ4Ijo1OTAsInkiOjM0MCwid2lyZXMiOltbImNmNmViZjAyZDAwZWFjYTYiXV19XQ==",[87,346,49],{"id":347},"for-loop",[18,349,350,351,354,355,358,359,362],{},"In traditional programming, ",[111,352,353],{},"for"," loops iterate a set number of times based on an index or range, while ",[111,356,357],{},"while"," loops execute as long as a condition is ",[111,360,361],{},"true",".",[18,364,365,366,368,369,371],{},"In Node-RED, you can simulate a ",[111,367,353],{}," loop by managing a counter with nodes to iterate through array elements. By incrementing an index variable, you can access each element and perform operations, effectively mimicking the behavior of a traditional ",[111,370,353],{}," loop.",[18,373,374,375,377],{},"Here’s how you can set up a ",[111,376,353],{}," loop in Node-RED:",[94,379,380,391,406,425,446,466,475],{},[44,381,98,382,384,385,267,387,390],{},[47,383,101],{}," node onto the canvas and set the ",[111,386,266],{},[111,388,389],{},"[\"foo\",\"bar\",\"foobar\"]",". This node triggers the start of the loop and provides the array to process.",[44,392,105,393,395,396,267,398,401,402,121,404,124],{},[47,394,108],{}," node to initialize the loop counter. Configure it to set ",[111,397,113],{},[111,399,400],{},"0",", and connect the ",[47,403,101],{},[47,405,108],{},[44,407,408,409,411,412,414,415,138,418,118,420,422,423,124],{},"Next, drag a ",[47,410,130],{}," node onto the canvas. Configure it to check if ",[111,413,113],{}," is equal to the array length (",[111,416,417],{},"msg.i == msg.payload.length",[111,419,141],{},[47,421,108],{}," node to the ",[47,424,130],{},[44,426,260,427,429,430,267,432,435,436,438,439,441,442,445],{},[47,428,108],{}," node to increment the counter. Configure it to set ",[111,431,113],{},[111,433,434],{},"i + 1"," using a JSONata expression. Connect this ",[47,437,108],{}," node to the output of the ",[47,440,130],{}," node where the condition (",[111,443,444],{},"msg.i \u003C msg.payload.length",") is true (second output).",[44,447,448,449,451,452,267,454,457,458,422,460,462,463,465],{},"To access and display the array elements, drag a ",[47,450,108],{}," node onto the canvas. Configure it to set ",[111,453,266],{},[111,455,456],{},"msg.payload[msg.i]",", accessing the array element at the current index. Connect this ",[47,459,108],{},[47,461,130],{}," node's second output (",[111,464,141],{},").",[44,467,468,469,471,472,474],{},"Attach a ",[47,470,250],{}," node to the output of this ",[47,473,108],{}," node to print the current array element.",[44,476,477,478,480,481,267,483,486,487,489,490,492,493,495],{},"For the final step, add another ",[47,479,108],{}," node to signal when the loop has completed. Configure it to set ",[111,482,266],{},[111,484,485],{},"completed",", and connect it to the first output of the ",[47,488,130],{}," node where the loop condition is ",[111,491,417],{},". Finally, attach a ",[47,494,250],{}," node to display the completion message.",[18,497,498],{},"This flow will iterate through the array, printing each element until all elements have been processed. Once the loop reaches the end of the array, it prints a \"completed\" message and terminates.",[155,500,502],{"className":289,"code":501,"language":291,"meta":12,"style":12},"graph TD\n    A[\"Inject Node\u003Cbr>Sets msg.payload to array\"] --> B[\"Change Node\u003Cbr>Initialize Counter\u003Cbr>Sets msg.i = 0\"]\n    B --> C[\"Switch Node\u003Cbr>Check if msg.i == msg.payload.length\"]\n    C -->|\"msg.i \u003C msg.payload.length\"| D[\"Change Node\u003Cbr>Increment Counter\u003Cbr>Sets msg.i = msg.i + 1\"]\n    D --> E[\"Change Node\u003Cbr>Access Element\u003Cbr>Sets msg.payload = msg.payload[msg.i]\"]\n    E --> F[\"Debug Node\u003Cbr>Display Current Element\"]\n    C -->|\"msg.i == msg.payload.length\"| G[\"Change Node\u003Cbr>Loop Completion\u003Cbr>Sets msg.payload = 'completed'\"]\n    G --> H[\"Debug Node\u003Cbr>Display Completion Message\"]\n",[111,503,504,508,513,518,523,528,533,538],{"__ignoreMap":12},[163,505,506],{"class":165,"line":166},[163,507,298],{},[163,509,510],{"class":165,"line":222},[163,511,512],{},"    A[\"Inject Node\u003Cbr>Sets msg.payload to array\"] --> B[\"Change Node\u003Cbr>Initialize Counter\u003Cbr>Sets msg.i = 0\"]\n",[163,514,515],{"class":165,"line":306},[163,516,517],{},"    B --> C[\"Switch Node\u003Cbr>Check if msg.i == msg.payload.length\"]\n",[163,519,520],{"class":165,"line":312},[163,521,522],{},"    C -->|\"msg.i \u003C msg.payload.length\"| D[\"Change Node\u003Cbr>Increment Counter\u003Cbr>Sets msg.i = msg.i + 1\"]\n",[163,524,525],{"class":165,"line":318},[163,526,527],{},"    D --> E[\"Change Node\u003Cbr>Access Element\u003Cbr>Sets msg.payload = msg.payload[msg.i]\"]\n",[163,529,530],{"class":165,"line":324},[163,531,532],{},"    E --> F[\"Debug Node\u003Cbr>Display Current Element\"]\n",[163,534,535],{"class":165,"line":330},[163,536,537],{},"    C -->|\"msg.i == msg.payload.length\"| G[\"Change Node\u003Cbr>Loop Completion\u003Cbr>Sets msg.payload = 'completed'\"]\n",[163,539,540],{"class":165,"line":336},[163,541,542],{},"    G --> H[\"Debug Node\u003Cbr>Display Completion Message\"]\n",[341,544],{":height":343,"flow":545},"W3siaWQiOiIzYjU0NmUwNjEyNjczNDc4IiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJuYW1lIjoiRm9yTG9vcCIsInN0eWxlIjp7ImxhYmVsIjp0cnVlfSwibm9kZXMiOlsiOGVlMTZjMWQwNmZjYTlmZSIsIjY0YTRhNzMyOTYzMWQ3Y2UiLCJlNjdhMzQyODVhN2U2OTc5IiwiZTIwNzRjZjAxZWQ0NTFmZCIsIjgxMWNlZGJlN2NiODk0MTUiLCI4YmJjY2MyZDEwYzM2YmZlIiwiODI2ZDgxOWEwNjgxMDE4NCIsImU3ZWJmN2Y2NmNkYTEzNzAiXSwieCI6MTQsInkiOjE1OSwidyI6MTI5MiwiaCI6MjQyfSx7ImlkIjoiOGVlMTZjMWQwNmZjYTlmZSIsInR5cGUiOiJzd2l0Y2giLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiIzYjU0NmUwNjEyNjczNDc4IiwibmFtZSI6ImlmIG1zZy5pID09IG1zZy5wYXlsb2FkLmxlbmd0aCIsInByb3BlcnR5IjoiaSIsInByb3BlcnR5VHlwZSI6Im1zZyIsInJ1bGVzIjpbeyJ0IjoiZXEiLCJ2IjoicGF5bG9hZC5sZW5ndGgiLCJ2dCI6Im1zZyJ9LHsidCI6ImVsc2UifV0sImNoZWNrYWxsIjoidHJ1ZSIsInJlcGFpciI6ZmFsc2UsIm91dHB1dHMiOjIsIngiOjU1MCwieSI6MjgwLCJ3aXJlcyI6W1siOGJiY2NjMmQxMGMzNmJmZSJdLFsiZTdlYmY3ZjY2Y2RhMTM3MCIsIjgyNmQ4MTlhMDY4MTAxODQiXV19LHsiaWQiOiI2NGE0YTczMjk2MzFkN2NlIiwidHlwZSI6ImRlYnVnIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiM2I1NDZlMDYxMjY3MzQ3OCIsIm5hbWUiOiJFbmQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJ0cnVlIiwidGFyZ2V0VHlwZSI6ImZ1bGwiLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjEyMTAsInkiOjIwMCwid2lyZXMiOltdfSx7ImlkIjoiZTY3YTM0Mjg1YTdlNjk3OSIsInR5cGUiOiJkZWJ1ZyIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjNiNTQ2ZTA2MTI2NzM0NzgiLCJuYW1lIjoiT3V0cHV0IFwiaVwiIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjEwODAsInkiOjM0MCwid2lyZXMiOltdfSx7ImlkIjoiZTIwNzRjZjAxZWQ0NTFmZCIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiIzYjU0NmUwNjEyNjczNDc4IiwibmFtZSI6IlN0YXJ0IiwicHJvcHMiOlt7InAiOiJwYXlsb2FkIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6IiIsInRvcGljIjoiIiwicGF5bG9hZCI6IltcImhlbGxvXCIsXCJydW5cIixcIndoeVwiXSIsInBheWxvYWRUeXBlIjoianNvbiIsIngiOjExMCwieSI6MjgwLCJ3aXJlcyI6W1siODExY2VkYmU3Y2I4OTQxNSJdXX0seyJpZCI6IjgxMWNlZGJlN2NiODk0MTUiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiM2I1NDZlMDYxMjY3MzQ3OCIsIm5hbWUiOiJpbml0aWxpemVkIGkgd2l0aCAwIiwicnVsZXMiOlt7InQiOiJzZXQiLCJwIjoiaSIsInB0IjoibXNnIiwidG8iOiIwIiwidG90IjoibnVtIn1dLCJhY3Rpb24iOiIiLCJwcm9wZXJ0eSI6IiIsImZyb20iOiIiLCJ0byI6IiIsInJlZyI6ZmFsc2UsIngiOjI4MCwieSI6MjgwLCJ3aXJlcyI6W1siOGVlMTZjMWQwNmZjYTlmZSJdXX0seyJpZCI6IjhiYmNjYzJkMTBjMzZiZmUiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiM2I1NDZlMDYxMjY3MzQ3OCIsIm5hbWUiOiJJZiAnaScgZXF1YWxzIGFycmF5IGxlbmd0aCwgc2V0IHBheWxvYWQgdG8gXCJjb21wbGV0ZWRcIi4iLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJwYXlsb2FkIiwicHQiOiJtc2ciLCJ0byI6IkNvbXBsZXRlZCIsInRvdCI6InN0ciJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo5MTAsInkiOjIwMCwid2lyZXMiOltbIjY0YTRhNzMyOTYzMWQ3Y2UiXV19LHsiaWQiOiI4MjZkODE5YTA2ODEwMTg0IiwidHlwZSI6ImNoYW5nZSIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjNiNTQ2ZTA2MTI2NzM0NzgiLCJuYW1lIjoiQWNjZXNzIGFycmF5IGVsZW1lbnQgd2l0aCBpIiwicnVsZXMiOlt7InQiOiJzZXQiLCJwIjoicGF5bG9hZCIsInB0IjoibXNnIiwidG8iOiJwYXlsb2FkW21zZy5pXSIsInRvdCI6Im1zZyJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo4NjAsInkiOjM0MCwid2lyZXMiOltbImU2N2EzNDI4NWE3ZTY5NzkiXV19LHsiaWQiOiJlN2ViZjdmNjZjZGExMzcwIiwidHlwZSI6ImNoYW5nZSIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjNiNTQ2ZTA2MTI2NzM0NzgiLCJuYW1lIjoiaW5jcmVtZW50IGkgYnkgMSIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6ImkiLCJwdCI6Im1zZyIsInRvIjoiaSsxIiwidG90IjoianNvbmF0YSJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo1NDAsInkiOjM2MCwid2lyZXMiOltbIjhlZTE2YzFkMDZmY2E5ZmUiXV19XQ==",[87,547,61],{"id":548},"forof-foreach-loop",[18,550,350,551,553,554,556,557,553,563,569],{},[111,552,65],{}," and ",[111,555,69],{}," loops are commonly used to iterate through arrays or object properties, allowing for individual element processing. Since Node-RED doesn’t include these specific constructs, you can replicate their functionality by using a combination of nodes, particularly the ",[47,558,559],{},[33,560,562],{"href":561},"\u002Fnode-red\u002Fcore-nodes\u002Fsplit\u002F","Split",[47,564,565],{},[33,566,568],{"href":567},"\u002Fnode-red\u002Fcore-nodes\u002Fjoin\u002F","Join"," nodes.",[18,571,572],{},"Here’s how you can replicate this functionality in Node-RED:",[94,574,575,584,589,598],{},[44,576,98,577,384,579,267,581,362],{},[47,578,101],{},[111,580,266],{},[111,582,583],{},"[\"foo\", \"bar\", \"foobar\"]",[44,585,247,586,588],{},[47,587,562],{}," node onto the canvas. Keep the default settings. If you are working with a string, ensure you select the appropriate delimiter for splitting.",[44,590,591,592,594,595,597],{},"Optionally, use a ",[47,593,108],{}," or ",[47,596,152],{}," node to perform operations on each element if needed.",[44,599,247,600,602,603,605],{},[47,601,250],{}," node onto the canvas and connect it to the ",[47,604,562],{}," node’s output.",[18,607,608,609,611,612,614,615,617],{},"When you click the ",[47,610,101],{}," button, the ",[47,613,562],{}," node will process each element of the array individually, and the ",[47,616,250],{}," node will display each one in the debug window.",[18,619,620,621,362],{},"To explore how you can map, sort, filter, and reduce data using this approach, check out our guide: ",[33,622,624],{"href":623},"\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdata-tranformation\u002F","How to Filter, Map, Sort, and Reduce Data in Node-RED",[155,626,628],{"className":289,"code":627,"language":291,"meta":12,"style":12},"graph TD\n    A[\"Inject Node\"] --> B[\"Split Node\"]\n    B -->|Outputs Each Element Individually| C[\"Debug Node\"]\n    \n    A[\"Inject Node\\nSets msg.payload to array\"]\n    B[\"Split Node\\nSplits array into individual elements\"]\n    C[\"Debug Node\\nDisplays each element\"]\n",[111,629,630,634,639,644,649,654,659],{"__ignoreMap":12},[163,631,632],{"class":165,"line":166},[163,633,298],{},[163,635,636],{"class":165,"line":222},[163,637,638],{},"    A[\"Inject Node\"] --> B[\"Split Node\"]\n",[163,640,641],{"class":165,"line":306},[163,642,643],{},"    B -->|Outputs Each Element Individually| C[\"Debug Node\"]\n",[163,645,646],{"class":165,"line":312},[163,647,648],{},"    \n",[163,650,651],{"class":165,"line":318},[163,652,653],{},"    A[\"Inject Node\\nSets msg.payload to array\"]\n",[163,655,656],{"class":165,"line":324},[163,657,658],{},"    B[\"Split Node\\nSplits array into individual elements\"]\n",[163,660,661],{"class":165,"line":330},[163,662,663],{},"    C[\"Debug Node\\nDisplays each element\"]\n",[341,665],{":height":343,"flow":666},"W3siaWQiOiIyZTY3YjI3MzlmMzY0YTcxIiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJzdHlsZSI6eyJzdHJva2UiOiIjOTk5OTk5Iiwic3Ryb2tlLW9wYWNpdHkiOiIxIiwiZmlsbCI6Im5vbmUiLCJmaWxsLW9wYWNpdHkiOiIxIiwibGFiZWwiOnRydWUsImxhYmVsLXBvc2l0aW9uIjoibnciLCJjb2xvciI6IiNhNGE0YTQifSwibm9kZXMiOlsiMmFkZDI3MDVkMjYyMDEwZCIsIjQwMzMzYzczNjg0NGEwYzEiLCIzMzM3YmEwMjRhMzYzYTE1IiwiMmY3ZDJhYWIxMmIzYjRlOSJdLCJ4IjoyNTQsInkiOjIxOSwidyI6NTMyLCJoIjoxNjJ9LHsiaWQiOiIyYWRkMjcwNWQyNjIwMTBkIiwidHlwZSI6ImluamVjdCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjJlNjdiMjczOWYzNjRhNzEiLCJuYW1lIjoiQXJyYXkiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwicGF5bG9hZCI6IltcImZvb1wiLFwiYmFyXCIsXCJmb29iYXJcIl0iLCJwYXlsb2FkVHlwZSI6Impzb24iLCJ4IjozNTAsInkiOjM0MCwid2lyZXMiOltbIjQwMzMzYzczNjg0NGEwYzEiXV19LHsiaWQiOiI0MDMzM2M3MzY4NDRhMGMxIiwidHlwZSI6InNwbGl0IiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiMmU2N2IyNzM5ZjM2NGE3MSIsIm5hbWUiOiIiLCJzcGx0IjoiXFxuIiwic3BsdFR5cGUiOiJzdHIiLCJhcnJheVNwbHQiOjEsImFycmF5U3BsdFR5cGUiOiJsZW4iLCJzdHJlYW0iOmZhbHNlLCJhZGRuYW1lIjoiIiwicHJvcGVydHkiOiJwYXlsb2FkIiwieCI6NTMwLCJ5IjozMjAsIndpcmVzIjpbWyIzMzM3YmEwMjRhMzYzYTE1Il1dfSx7ImlkIjoiMzMzN2JhMDI0YTM2M2ExNSIsInR5cGUiOiJkZWJ1ZyIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjJlNjdiMjczOWYzNjRhNzEiLCJuYW1lIjoiIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoidHJ1ZSIsInRhcmdldFR5cGUiOiJmdWxsIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo2OTAsInkiOjMyMCwid2lyZXMiOltdfSx7ImlkIjoiMmY3ZDJhYWIxMmIzYjRlOSIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiIyZTY3YjI3MzlmMzY0YTcxIiwibmFtZSI6Ik9iamVjdCIsInByb3BzIjpbeyJwIjoicGF5bG9hZCJ9LHsicCI6InRvcGljIiwidnQiOiJzdHIifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwicGF5bG9hZCI6IntcImZpcnN0XCI6XCJIZWxsbyBXb3JsZFwiLFwic2Vjb25kXCI6OCxcInRoaXJkXCI6dHJ1ZX0iLCJwYXlsb2FkVHlwZSI6Impzb24iLCJ4IjozNTAsInkiOjI2MCwid2lyZXMiOltbIjQwMzMzYzczNjg0NGEwYzEiXV19XQ==",[87,668,670],{"id":669},"implementing-loops-with-the-function-node","Implementing Loops with the Function Node",[18,672,673,674,679,680,682],{},"Implementing loops with the ",[47,675,676],{},[33,677,152],{"href":678},"\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002F"," node is straightforward if you're familiar with JavaScript, as it allows you to write custom code. However, a common issue is figuring out how to send a message on each iteration without ending the loop after the first iteration. In this section, we’ll show you how to implement loops in the ",[111,681,152],{}," node correctly, ensuring that each iteration is processed and sent out properly without prematurely breaking the loop.",[18,684,685,686,371],{},"For demonstration purposes, we will implement a ",[111,687,353],{},[94,689,690,700,809],{},[44,691,692,693,384,695,267,697,362],{},"Drag the ",[47,694,101],{},[111,696,266],{},[111,698,699],{},"[1, \"hello\", \"%\", true]",[44,701,692,702,704,705],{},[47,703,152],{}," node onto the canvas and add the following JavaScript code:\n",[155,706,708],{"className":157,"code":707,"language":159,"meta":12,"style":12},"for (let i = 0; i \u003C msg.payload.length; i++) {\n    \u002F\u002F Create a new message for each item\n    let newMsg = { ...msg }; \u002F\u002F Copy the original msg object\n    newMsg.payload = msg.payload[i]; \u002F\u002F Set payload to the current item\n    node.send(newMsg); \u002F\u002F Send the message\n}\n",[111,709,710,750,755,777,790,804],{"__ignoreMap":12},[163,711,712,714,717,720,723,726,729,732,735,738,741,744,747],{"class":165,"line":166},[163,713,353],{"class":173},[163,715,716],{"class":169}," (",[163,718,719],{"class":173},"let",[163,721,722],{"class":169}," i ",[163,724,725],{"class":173},"=",[163,727,728],{"class":187}," 0",[163,730,731],{"class":169},"; i ",[163,733,734],{"class":173},"\u003C",[163,736,737],{"class":169}," msg.payload.",[163,739,740],{"class":187},"length",[163,742,743],{"class":169},"; i",[163,745,746],{"class":173},"++",[163,748,749],{"class":169},") {\n",[163,751,752],{"class":165,"line":222},[163,753,754],{"class":218},"    \u002F\u002F Create a new message for each item\n",[163,756,757,760,763,765,768,771,774],{"class":165,"line":306},[163,758,759],{"class":173},"    let",[163,761,762],{"class":169}," newMsg ",[163,764,725],{"class":173},[163,766,767],{"class":169}," { ",[163,769,770],{"class":173},"...",[163,772,773],{"class":169},"msg }; ",[163,775,776],{"class":218},"\u002F\u002F Copy the original msg object\n",[163,778,779,782,784,787],{"class":165,"line":312},[163,780,781],{"class":169},"    newMsg.payload ",[163,783,725],{"class":173},[163,785,786],{"class":169}," msg.payload[i]; ",[163,788,789],{"class":218},"\u002F\u002F Set payload to the current item\n",[163,791,792,795,798,801],{"class":165,"line":318},[163,793,794],{"class":169},"    node.",[163,796,797],{"class":180},"send",[163,799,800],{"class":169},"(newMsg); ",[163,802,803],{"class":218},"\u002F\u002F Send the message\n",[163,805,806],{"class":165,"line":324},[163,807,808],{"class":169},"}\n",[44,810,247,811,813,814,124],{},[47,812,250],{}," node onto the canvas and connect it to the output of the ",[47,815,152],{},[18,817,818,819,821,822,825,826,828,829,831,832,834],{},"When you deploy the flow and click the ",[47,820,101],{}," button, each item in the array will be sent as a separate message and printed in the debug panel. This works because the ",[111,823,824],{},"node.send()"," method allows you to send messages asynchronously. Unlike ",[111,827,225],{},", which ends the execution of the ",[47,830,152],{}," node immediately, ",[111,833,824],{}," continues to process and send each message without halting the loop.",[18,836,837,838,840,841,362],{},"By using ",[111,839,824],{}," inside the loop, you ensure that each iteration produces a separate message, and the Function node can handle multiple messages efficiently. For more information on on this, refer to ",[33,842,845],{"href":843,"rel":844},"https:\u002F\u002Fnodered.org\u002Fdocs\u002Fuser-guide\u002Fwriting-functions#sending-messages-asynchronously",[37],"Documentation on Sending messages asynchronously",[341,847],{":height":343,"flow":848},"W3siaWQiOiI1MGJlMmJhYzNiMDU4YmU1IiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJuYW1lIjoiIiwic3R5bGUiOnsibGFiZWwiOnRydWV9LCJub2RlcyI6WyI5N2MyODhmMzI5NTVjNmFiIiwiN2E4NDA0YzQ0YWMwNzQ5YiIsIjBkN2I5Y2I1MTY2OWFkOWIiXSwieCI6NDE0LCJ5Ijo0OTksInciOjYxMiwiaCI6ODJ9LHsiaWQiOiI5N2MyODhmMzI5NTVjNmFiIiwidHlwZSI6ImluamVjdCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjUwYmUyYmFjM2IwNThiZTUiLCJuYW1lIjoiQXJyYXkiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwicGF5bG9hZCI6IlsxLCBcImhlbGxvXCIsIFwiJVwiLCB0cnVlXSIsInBheWxvYWRUeXBlIjoianNvbiIsIngiOjUxMCwieSI6NTQwLCJ3aXJlcyI6W1siN2E4NDA0YzQ0YWMwNzQ5YiJdXX0seyJpZCI6IjdhODQwNGM0NGFjMDc0OWIiLCJ0eXBlIjoiZnVuY3Rpb24iLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI1MGJlMmJhYzNiMDU4YmU1IiwibmFtZSI6IkZvciBMb29wIiwiZnVuYyI6ImZvciAobGV0IGkgPSAwOyBpIDwgbXNnLnBheWxvYWQubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBDcmVhdGUgYSBuZXcgbWVzc2FnZSBmb3IgZWFjaCBpdGVtXG4gICAgbGV0IG5ld01zZyA9IHsgLi4ubXNnIH07IC8vIENvcHkgdGhlIG9yaWdpbmFsIG1zZyBvYmplY3RcbiAgICBuZXdNc2cucGF5bG9hZCA9IG1zZy5wYXlsb2FkW2ldOyAvLyBTZXQgcGF5bG9hZCB0byB0aGUgY3VycmVudCBpdGVtXG4gICAgbm9kZS5zZW5kKG5ld01zZylcbn0iLCJvdXRwdXRzIjoxLCJ0aW1lb3V0IjowLCJub2VyciI6MCwiaW5pdGlhbGl6ZSI6IiIsImZpbmFsaXplIjoiIiwibGlicyI6W10sIngiOjcwMCwieSI6NTQwLCJ3aXJlcyI6W1siMGQ3YjljYjUxNjY5YWQ5YiJdXX0seyJpZCI6IjBkN2I5Y2I1MTY2OWFkOWIiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI1MGJlMmJhYzNiMDU4YmU1IiwibmFtZSI6ImRlYnVnIDEiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJmYWxzZSIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6OTIwLCJ5Ijo1NDAsIndpcmVzIjpbXX1d",[82,850,852],{"id":851},"implementing-loops-in-node-red-with-custom-node","Implementing Loops in Node-RED with Custom node",[18,854,855,856,861],{},"Throughtout this section we will show you how you can implement loops in Node-RED with custom nodes easily, there are plenty of custom nodes that can be used to achieve the loop but we will going use the popular one ",[33,857,860],{"href":858,"rel":859},"https:\u002F\u002Fflows.nodered.org\u002Fnode\u002Fnode-red-contrib-loop",[37],"node-red-contrib-loop",", before moving further make sure to install it by palette manager also for demostration purpose we will use same example we used in the above sections with loops.",[87,863,55],{"id":864},"while-loop-1",[94,866,867,872,886],{},[44,868,692,869,871],{},[47,870,101],{}," node onto the canvas.",[44,873,692,874,877,878,881,882,885],{},[47,875,876],{},"Loop"," node onto the canvas, double-click it, and set the kind to ",[47,879,880],{},"Condition",". Set the condition to ",[111,883,884],{},"msg.payload.includes(\"Z\") != true"," as JavaScript. The condition kind offers a lot of flexibility as it allows adding conditions in JavaScript, regex, and JSONata.",[44,887,888],{},"Set the \"When test\" option:",[41,890,891,894],{},[44,892,893],{},"Choose \"after\" if you want the loop to execute at least once before checking the condition, similar to how a while loop operates when it checks the condition after the first iteration.",[44,895,896],{},"Choose \"before\" if you want the loop to check the condition before executing, functioning like a traditional while loop that only runs if the condition is true at the start.",[94,898,899,951,968,979],{"start":312},[44,900,692,901,903,904,906,907],{},[47,902,152],{}," node onto the canvas. Add the following JavaScript code to it and connect its input to the second output of the ",[47,905,876],{}," node:",[155,908,909],{"className":157,"code":158,"language":159,"meta":12,"style":12},[111,910,911,945],{"__ignoreMap":12},[163,912,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943],{"class":165,"line":166},[163,914,170],{"class":169},[163,916,174],{"class":173},[163,918,177],{"class":169},[163,920,181],{"class":180},[163,922,184],{"class":169},[163,924,188],{"class":187},[163,926,191],{"class":173},[163,928,194],{"class":169},[163,930,197],{"class":180},[163,932,200],{"class":169},[163,934,203],{"class":180},[163,936,206],{"class":169},[163,938,209],{"class":173},[163,940,212],{"class":187},[163,942,215],{"class":169},[163,944,219],{"class":218},[163,946,947,949],{"class":165,"line":222},[163,948,225],{"class":173},[163,950,228],{"class":169},[44,952,692,953,956,957,959,960,962,963,965,966,124],{},[47,954,955],{},"Delay"," node onto the canvas, set the delay to 0.5 milliseconds. When using the condition kind of loop, it is important to use the ",[47,958,955],{}," node with this loop custom node to avoid creating an infinite loop. Connect the ",[47,961,955],{}," node's input to the output of the ",[47,964,152],{}," node, and connect its output to the input of the ",[47,967,876],{},[44,969,247,970,972,973,975,976,978],{},[47,971,250],{}," node onto the canvas and connect its input to the output of the ",[47,974,152],{}," node. This will print the current ",[111,977,266],{}," after each iteration.",[44,980,981,982,984,985,987],{},"Drag another ",[47,983,250],{}," node onto the canvas and connect its input to the first output of the ",[47,986,876],{}," node. This will print when the loop exits, indicating that the condition has been met.",[341,989],{":height":343,"flow":990},"W3siaWQiOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJuYW1lIjoiV2hpbGUgTG9vcCIsInN0eWxlIjp7ImxhYmVsIjp0cnVlfSwibm9kZXMiOlsiM2JhOTMxYjEuZmI0OGQ2IiwiMmQyOTdkZmEuNmU2NjBhIiwiNWFlZjI4ZS4wZjllN2Q4IiwiOTBjNDkwMDguMDUzYTU4IiwiOWE3MjU2NjguMzMwMTQ4IiwiZTg4YjBlOGMuZDM5ODU4IiwiOWM0OGYzMzYuNDcxZWEiLCI2NjE0NGFmNC5kMWVjOWMiLCI3NWM2YjMyNi5lOTM0ZDQiLCI3N2FjNjc2My44ZTU0YjgiLCI5OWIyNjViNC5lMmQzYzgiXSwieCI6MTc0LCJ5IjoxMzksInciOjY3MiwiaCI6MzIyfSx7ImlkIjoiM2JhOTMxYjEuZmI0OGQ2IiwidHlwZSI6Imxvb3AiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwibmFtZSI6IiIsImtpbmQiOiJjb25kIiwiY291bnQiOiIxMCIsImluaXRpYWwiOiIxIiwic3RlcCI6IjEiLCJjb25kaXRpb24iOiJtc2cucGF5bG9hZC5pbmNsdWRlcyhcIlpcIikgIT0gdHJ1ZSIsImNvbmRpdGlvblR5cGUiOiJqcyIsIndoZW4iOiJhZnRlciIsImVudW1lcmF0aW9uIjoiZW51bSIsImVudW1lcmF0aW9uVHlwZSI6Im1zZyIsImxpbWl0IjoiIiwibG9vcFBheWxvYWQiOiJsb29wLWtlZXAiLCJmaW5hbFBheWxvYWQiOiJmaW5hbC1sYXN0IiwieCI6NTAwLCJ5IjoyODAsIndpcmVzIjpbWyI1YWVmMjhlLjBmOWU3ZDgiXSxbImU4OGIwZThjLmQzOTg1OCJdXX0seyJpZCI6IjJkMjk3ZGZhLjZlNjYwYSIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwibmFtZSI6IiIsInByb3BzIjpbeyJwIjoicGF5bG9hZCJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJwYXlsb2FkIjoiIiwicGF5bG9hZFR5cGUiOiJzdHIiLCJ4IjoyNzAsInkiOjI4MCwid2lyZXMiOltbIjNiYTkzMWIxLmZiNDhkNiJdXX0seyJpZCI6IjVhZWYyOGUuMGY5ZTdkOCIsInR5cGUiOiJkZWJ1ZyIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjdlZjRkNDFjZjc0Zjc1YzMiLCJuYW1lIjoiIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoibG9vcCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjcyMCwieSI6MjgwLCJ3aXJlcyI6W119LHsiaWQiOiI5MGM0OTAwOC4wNTNhNTgiLCJ0eXBlIjoiY29tbWVudCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjdlZjRkNDFjZjc0Zjc1YzMiLCJuYW1lIjoiRXhhbXBsZTogQ29uZGl0aW9uYWwgbG9vcCIsImluZm8iOiIiLCJ4IjozMTAsInkiOjE4MCwid2lyZXMiOltdfSx7ImlkIjoiOWE3MjU2NjguMzMwMTQ4IiwidHlwZSI6ImNvbW1lbnQiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwibmFtZSI6IlNob3cgZmluYWwgc3RhdHVzIiwiaW5mbyI6IiIsIngiOjc0MCwieSI6MjQwLCJ3aXJlcyI6W119LHsiaWQiOiJlODhiMGU4Yy5kMzk4NTgiLCJ0eXBlIjoiZnVuY3Rpb24iLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwibmFtZSI6IiIsImZ1bmMiOiIvLyBhZGQgQVNDSUkgY2hhciBmcm9tIDMyIHRvIDEyNlxubXNnLnBheWxvYWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShNYXRoLnJhbmRvbSgpKjI2ICsgNjUpO1xucmV0dXJuIG1zZzsiLCJvdXRwdXRzIjoxLCJub2VyciI6MCwiaW5pdGlhbGl6ZSI6IiIsImZpbmFsaXplIjoiIiwieCI6MzQwLCJ5IjozODAsIndpcmVzIjpbWyI2NjE0NGFmNC5kMWVjOWMiLCI5YzQ4ZjMzNi40NzFlYSJdXX0seyJpZCI6IjljNDhmMzM2LjQ3MWVhIiwidHlwZSI6ImRlYnVnIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiN2VmNGQ0MWNmNzRmNzVjMyIsIm5hbWUiOiIiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJmYWxzZSIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6NzMwLCJ5IjozODAsIndpcmVzIjpbXX0seyJpZCI6IjY2MTQ0YWY0LmQxZWM5YyIsInR5cGUiOiJkZWxheSIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjdlZjRkNDFjZjc0Zjc1YzMiLCJuYW1lIjoiIiwicGF1c2VUeXBlIjoiZGVsYXkiLCJ0aW1lb3V0IjoiMC41IiwidGltZW91dFVuaXRzIjoibWlsbGlzZWNvbmRzIiwicmF0ZSI6IjEiLCJuYlJhdGVVbml0cyI6IjEiLCJyYXRlVW5pdHMiOiJzZWNvbmQiLCJyYW5kb21GaXJzdCI6IjEiLCJyYW5kb21MYXN0IjoiNSIsInJhbmRvbVVuaXRzIjoic2Vjb25kcyIsImRyb3AiOmZhbHNlLCJhbGxvd3JhdGUiOmZhbHNlLCJvdXRwdXRzIjoxLCJ4Ijo1MzAsInkiOjM1NSwid2lyZXMiOltbIjNiYTkzMWIxLmZiNDhkNiJdXX0seyJpZCI6Ijc1YzZiMzI2LmU5MzRkNCIsInR5cGUiOiJjb21tZW50IiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiN2VmNGQ0MWNmNzRmNzVjMyIsIm5hbWUiOiJTaG93IHN0cmluZyIsImluZm8iOiIiLCJ4Ijo3MzAsInkiOjQyMCwid2lyZXMiOltdfSx7ImlkIjoiNzdhYzY3NjMuOGU1NGI4IiwidHlwZSI6ImNvbW1lbnQiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwibmFtZSI6IkFkZCBjaGFyIHRvIHN0cmluZyIsImluZm8iOiIiLCJ4IjozNzAsInkiOjQyMCwid2lyZXMiOltdfSx7ImlkIjoiOTliMjY1YjQuZTJkM2M4IiwidHlwZSI6ImNvbW1lbnQiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI3ZWY0ZDQxY2Y3NGY3NWMzIiwibmFtZSI6IlJlcGVhdCB1bnRpbCBzdHJpbmcgZG9lc24ndCBmaW5pc2ggd2l0aCBcIlpcIiIsImluZm8iOiIiLCJ4Ijo0ODAsInkiOjI0MCwid2lyZXMiOltdfV0=",[87,992,49],{"id":993},"for-loop-1",[94,995,996,1005,1020,1041,1055,1078],{},[44,997,98,998,384,1000,267,1002,1004],{},[47,999,101],{},[111,1001,266],{},[111,1003,583],{},". This node will trigger the start of the loop and provide the array we want to process.",[44,1006,247,1007,451,1009,267,1012,1015,1016,121,1018,124],{},[47,1008,108],{},[111,1010,1011],{},"msg.count",[111,1013,1014],{},"msg.payload.length",", which will store the length of the array. Connect the ",[47,1017,101],{},[47,1019,108],{},[44,1021,247,1022,1024,1025,1028,1029,1031,1032,1034,1035,1038,1039,362],{},[47,1023,876],{}," node onto the canvas, double-click on it, and set the kind to ",[47,1026,1027],{},"Fixed",". Leave the \"count\" field empty as we are setting it dynamically using ",[111,1030,1011],{},". Set the initial value to ",[111,1033,400],{}," and the step value to ",[111,1036,1037],{},"1",". Set the loop payload to the original ",[111,1040,266],{},[44,1042,408,1043,1045,1046,1048,1049,1051,1052,1054],{},[47,1044,108],{}," node onto the canvas and configure it to either clear or set ",[111,1047,266],{}," to itself. This ensures that the payload remains unchanged. Connect its input to the output of the ",[47,1050,876],{}," node and then connect its output back to the input of the ",[47,1053,876],{}," node. This setup allows the loop to repeat.",[44,1056,1057,1058,1060,1061,267,1063,1066,1067,1070,1071,1073,1074,1077],{},"Then, drag another ",[47,1059,108],{}," node onto the canvas. Configure this node to set ",[111,1062,266],{},[111,1064,1065],{},"msg.payload[msg.loop.value]",", which extracts the current array element using the loop’s counter (",[111,1068,1069],{},"msg.loop.value","). The ",[47,1072,876],{}," node generates properties like ",[111,1075,1076],{},"value",", which is the counter we are incrementing.",[44,1079,1080,1081,1083,1084,1086],{},"Finally, drag a ",[47,1082,250],{}," node onto the canvas and connect it to the output of the previous ",[47,1085,108],{}," node to print the current array element in each iteration.",[341,1088],{":height":343,"flow":1089},"W3siaWQiOiJhYzRiZmVhZDMwYmU3MzgwIiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJuYW1lIjoiRm9yIExvb3AiLCJzdHlsZSI6eyJsYWJlbCI6dHJ1ZX0sIm5vZGVzIjpbIjJmZmMzZDA3LjIzZTZmYSIsIjZlMTExOGIxLjQ0OWRiOCIsImVhODUyNjY3ZDcyNGNmYjEiLCI4ODBhMjUwMWY3ZDE1M2JhIiwiYmQ1OGE5NTYuYzAzNmIiLCI2MGE4ZjEzOC4wOTA5YSIsIjQ0ZjFhMjk0MDMxNTdiYmEiXSwieCI6NzQsInkiOjE5OSwidyI6MTEzMiwiaCI6MjAyfSx7ImlkIjoiMmZmYzNkMDcuMjNlNmZhIiwidHlwZSI6ImluamVjdCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6ImFjNGJmZWFkMzBiZTczODAiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJwYXlsb2FkIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsInBheWxvYWQiOiJbXCJmb29cIixcImJhclwiLFwiZm9vYmFyXCJdIiwicGF5bG9hZFR5cGUiOiJqc29uIiwieCI6MjEwLCJ5IjoyNjAsIndpcmVzIjpbWyI4ODBhMjUwMWY3ZDE1M2JhIl1dfSx7ImlkIjoiNmUxMTE4YjEuNDQ5ZGI4IiwidHlwZSI6Imxvb3AiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiJhYzRiZmVhZDMwYmU3MzgwIiwibmFtZSI6IiIsImtpbmQiOiJmY250IiwiY291bnQiOiIiLCJpbml0aWFsIjoiMCIsInN0ZXAiOiIxIiwiY29uZGl0aW9uIjoiIiwiY29uZGl0aW9uVHlwZSI6ImpzIiwid2hlbiI6ImJlZm9yZSIsImVudW1lcmF0aW9uIjoiZW51bSIsImVudW1lcmF0aW9uVHlwZSI6Im1zZyIsImxpbWl0IjoiIiwibG9vcFBheWxvYWQiOiJsb29wLW9yaWciLCJmaW5hbFBheWxvYWQiOiJmaW5hbC1sYXN0IiwieCI6NzEwLCJ5IjoyNjAsIndpcmVzIjpbWyI0NGYxYTI5NDAzMTU3YmJhIl0sWyJiZDU4YTk1Ni5jMDM2YiJdXX0seyJpZCI6ImVhODUyNjY3ZDcyNGNmYjEiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiYWM0YmZlYWQzMGJlNzM4MCIsIm5hbWUiOiJBY2Nlc3MgYXJyYXkgZWxlbWVudCB3aXRoIGxvb3AgY291bnRlciIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6InBheWxvYWQiLCJwdCI6Im1zZyIsInRvIjoicGF5bG9hZFttc2cubG9vcC52YWx1ZV0iLCJ0b3QiOiJtc2cifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6ODQwLCJ5IjozNjAsIndpcmVzIjpbWyI2MGE4ZjEzOC4wOTA5YSJdXX0seyJpZCI6Ijg4MGEyNTAxZjdkMTUzYmEiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiYWM0YmZlYWQzMGJlNzM4MCIsIm5hbWUiOiJTZXQgUGFzcyBDb3VudCIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6ImNvdW50IiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQubGVuZ3RoIiwidG90IjoibXNnIn1dLCJhY3Rpb24iOiIiLCJwcm9wZXJ0eSI6IiIsImZyb20iOiIiLCJ0byI6IiIsInJlZyI6ZmFsc2UsIngiOjQ0MCwieSI6MjYwLCJ3aXJlcyI6W1siNmUxMTE4YjEuNDQ5ZGI4Il1dfSx7ImlkIjoiYmQ1OGE5NTYuYzAzNmIiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiYWM0YmZlYWQzMGJlNzM4MCIsIm5hbWUiOiJSZXBlYXQiLCJydWxlcyI6W10sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6NTIwLCJ5IjozNjAsIndpcmVzIjpbWyI2ZTExMThiMS40NDlkYjgiLCJlYTg1MjY2N2Q3MjRjZmIxIl1dfSx7ImlkIjoiNjBhOGYxMzguMDkwOWEiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiJhYzRiZmVhZDMwYmU3MzgwIiwibmFtZSI6IiIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4IjoxMDkwLCJ5IjozNjAsIndpcmVzIjpbXX0seyJpZCI6IjQ0ZjFhMjk0MDMxNTdiYmEiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiJhYzRiZmVhZDMwYmU3MzgwIiwibmFtZSI6IkVuZCBMb29wIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjEwMDAsInkiOjI0MCwid2lyZXMiOltdfV0=",[87,1091,61],{"id":1092},"forof-foreach-loop-1",[94,1094,1095,1105,1120,1133],{},[44,1096,98,1097,384,1099,267,1101,1104],{},[47,1098,101],{},[111,1100,266],{},[111,1102,1103],{},"[6, 14, 36, -8, 100]",". This node will trigger the loop and provide the array of numbers to process.",[44,1106,247,1107,1109,1110,267,1113,1116,1117,1119],{},[47,1108,876],{}," node onto the canvas. Set the ",[47,1111,1112],{},"Kind",[47,1114,1115],{},"Enumeration"," and choose ",[111,1118,266],{}," as the enumeration source. This configuration will loop through each value in the array. Set the \"loop payload\" to the \"value\".",[44,1121,247,1122,1045,1124,1126,1127,1129,1130,1132],{},[47,1123,108],{},[111,1125,266],{}," to itself. This ensures that the payload remains unchanged during each iteration. Connect its input to the second output of the ",[47,1128,876],{}," node, then connect its output back to the input of the ",[47,1131,876],{}," node to create the loop.",[44,1134,1080,1135,251,1137,1139],{},[47,1136,250],{},[47,1138,876],{}," node. This will display the current value being processed in the loop.",[18,1141,1142,1143,1145],{},"With the ",[47,1144,1115],{}," kind, you can iterate through different types of data such as arrays, strings, objects, and more, making this loop versatile for handling various data structures.",[341,1147],{":height":343,"flow":1148},"W3siaWQiOiI2NWQ4NTRjOTA5ODM5M2U4IiwidHlwZSI6Imdyb3VwIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJuYW1lIjoiRm9yIG9mLyBmb3IgZWFjaCIsInN0eWxlIjp7ImxhYmVsIjp0cnVlfSwibm9kZXMiOlsiMzg2MzBmZjEuMjE3MjEiLCJmMDA5ZTBlOS4yNDU3NiIsImNmNTJiNmRkLjVmZWJiOCIsIjMzMDMxYzBlLjFiMTE1YyIsImIyOGIwNmYxLjM4ZWI0OCIsIjZlNTkzZmYyLmRjOTRjIl0sIngiOjMzNCwieSI6MjE5LCJ3Ijo3MjIsImgiOjIyMn0seyJpZCI6IjM4NjMwZmYxLjIxNzIxIiwidHlwZSI6ImluamVjdCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjY1ZDg1NGM5MDk4MzkzZTgiLCJuYW1lIjoiT2JqZWN0IiwicHJvcHMiOlt7InAiOiJwYXlsb2FkIn0seyJwIjoidG9waWMiLCJ2dCI6InN0ciJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJwYXlsb2FkIjoie1wiZmlyc3RcIjpcIkhlbGxvIFdvcmxkXCIsXCJzZWNvbmRcIjo4LFwidGhpcmRcIjp0cnVlfSIsInBheWxvYWRUeXBlIjoianNvbiIsIngiOjQzMCwieSI6MjYwLCJ3aXJlcyI6W1siZjAwOWUwZTkuMjQ1NzYiXV19LHsiaWQiOiJmMDA5ZTBlOS4yNDU3NiIsInR5cGUiOiJsb29wIiwieiI6ImEzYWE4NDA5NTdmNjU4YzYiLCJnIjoiNjVkODU0YzkwOTgzOTNlOCIsIm5hbWUiOiIiLCJraW5kIjoiZW51bSIsImNvdW50IjoiIiwiaW5pdGlhbCI6IiIsInN0ZXAiOiIiLCJjb25kaXRpb24iOiIiLCJjb25kaXRpb25UeXBlIjoianMiLCJ3aGVuIjoiYmVmb3JlIiwiZW51bWVyYXRpb24iOiJwYXlsb2FkIiwiZW51bWVyYXRpb25UeXBlIjoibXNnIiwibGltaXQiOiIiLCJsb29wUGF5bG9hZCI6Imxvb3AtdmFsIiwiZmluYWxQYXlsb2FkIjoiZmluYWwtb3JpZyIsIngiOjc0MCwieSI6MzAwLCJ3aXJlcyI6W1siY2Y1MmI2ZGQuNWZlYmI4Il0sWyIzMzAzMWMwZS4xYjExNWMiLCI2ZTU5M2ZmMi5kYzk0YyJdXX0seyJpZCI6ImNmNTJiNmRkLjVmZWJiOCIsInR5cGUiOiJkZWJ1ZyIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjY1ZDg1NGM5MDk4MzkzZTgiLCJuYW1lIjoiTG9vcCBFbmQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJsb29wIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6OTUwLCJ5IjoyODAsIndpcmVzIjpbXX0seyJpZCI6IjMzMDMxYzBlLjFiMTE1YyIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI2NWQ4NTRjOTA5ODM5M2U4IiwibmFtZSI6IlJlcGVhdCIsInJ1bGVzIjpbXSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo3MzAsInkiOjQwMCwid2lyZXMiOltbImYwMDllMGU5LjI0NTc2Il1dfSx7ImlkIjoiYjI4YjA2ZjEuMzhlYjQ4IiwidHlwZSI6ImluamVjdCIsInoiOiJhM2FhODQwOTU3ZjY1OGM2IiwiZyI6IjY1ZDg1NGM5MDk4MzkzZTgiLCJuYW1lIjoiQXJyYXkiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwicGF5bG9hZCI6IltcImZvb1wiLFwiYmFyXCIsXCJmb29iYXJcIl0iLCJwYXlsb2FkVHlwZSI6Impzb24iLCJ4Ijo0MzAsInkiOjMyMCwid2lyZXMiOltbImYwMDllMGU5LjI0NTc2Il1dfSx7ImlkIjoiNmU1OTNmZjIuZGM5NGMiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYTNhYTg0MDk1N2Y2NThjNiIsImciOiI2NWQ4NTRjOTA5ODM5M2U4IiwibmFtZSI6IiIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InRydWUiLCJ0YXJnZXRUeXBlIjoiZnVsbCIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6OTQwLCJ5Ijo0MDAsIndpcmVzIjpbXX1d",[1150,1151,1152],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":12,"searchDepth":222,"depth":222,"links":1154},[1155,1156],{"id":27,"depth":222,"text":28},{"id":76,"depth":222,"text":77,"children":1157},[1158,1159],{"id":84,"depth":306,"text":85},{"id":851,"depth":306,"text":852},"Learn how to implement while, for, and for...of loops in Node-RED with core and custom nodes for efficient data processing and automation.","md",{},true,"\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop",{"title":5,"description":1160},"node-red\u002Fgetting-started\u002Fprogramming\u002Floop","xoHsGksmGemfsDS5ifCY_2PtLRm4yDGUPk2AAzkr9sw",1780070557339]