Arrays & Objects in Node-RED

how can i access to my data in function node.
i have tested too many things but no one works. exemple
var matriculeString =msg.payload[0][data3];
var matriculeString =msg.data3;, etc ....

This page in the docs show you how to use the tool-tips in the debug panel to get the path.

But it would be also worth looking at one of the javascript array and object tutorials online, I still refer to the w3schools pages

1 Like

got it. i was missed "" for data3.
var obj = msg.payload[0];
var matriculeString =obj["data3"];
thanks for the pages and for your quick reply.

i have a counter function node

var counter = context.get('counter')|| 0;
msg.count = counter;
      var counter = counter +1;
return msg;

is it possible to make a counter inside mustache template node. i have tried this code but does't work. what do i miss her and thank you.
PS: {{@index}} doesn't show any thing.

        <div style= "float: none;display: block;text-align: right;">
     <p><b>Référence : {{payload.1}}</b></p>
      <b>Matricule :</b>   {{payload.{{count}}.data3}}
{{# payload}}
  {{data1}} {{data2}} this is index {{@index}}<br>
{{/ payload}}

Assuming your function is before your template in your flow.
You could add the counter to the message that is passed along the flow

var counter = context.get('counter')|| 0;
     msg.counter = counter +1; 
return msg;

yes i did that. my counter function node is working very well. and it is before the template .
my problem is her :


it doesn't show any thing

Add a debug node and look for the difference as to where the counter value is compared to your data

Référence : }}

Matricule : .data3}}
this is what i get in debug node. clearly it doesn't work like that. is there any way else to add counter.

You cannot use mustache tags inside other mustache tags like that.

Mustache is know as 'logic-less' templating - which means it is not meant to include logic within the template. If you need to select a particular element to display out of the msg.payload array, you should copy that value to a know property of the message before passing it to the Template.

For example:

var counter = context.get('counter')|| 0;
msg.count = counter;
counter = counter +1;
msg.selectedItem = msg.payload[msg.count].data3
return msg;

And then use {{msg.selectedItem}} in your template.


you mean {{selectedItem}}. thank you very much it works perfectly.