# Constructing Multiple Outputs

**URL:** <https://discourse.nodered.org/t/constructing-multiple-outputs/20988>\
**Category:** General\
**Created:** [29 January 2020 09:55 UTC](https://discourse.nodered.org/t/constructing-multiple-outputs/20988 "2020-01-29T09:55:56Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![lorccan](https://avatars.discourse-cdn.com/v4/letter/l/278dde/32.png) [@lorccan](https://discourse.nodered.org/u/lorccan)\
**Post date:** [29 January 2020 09:55 UTC](https://discourse.nodered.org/t/constructing-multiple-outputs/20988/1 "2020-01-29T09:55:56Z")

</div>

I’m new here, so please excuse any inexact terminology.

Input to a node with 3 outputs consists of an array: [34, 35, 36]

matchVar = 35

Function iterates over the array. Where a match is found, the corresponding msg.payload is set to {"On": true}. Where it does not match msg.payload becomes {"On": false}

I've got this far, but I am not constructing the output correctly:

```auto
var matchVar = 35; //test value
var outmsg = {};
var inputArray = msg.payload; // [34, 35, 36]
var outputArray = [];
var i;
for (i = 0; i < inputArray.length; i++) {
    if (inputArray[i] == switchedOn) {
        outmsg.payload={"On": "true"};
    }else{
        outmsg.payload={"On": "false"};
    }
    outputArray.push(outmsg.payload);
}
return outputArray;

```

I (think I) know that the output should look like: [msg1, msg2, msg3] where msg1.payload is {"On": "true"}, msg2.payload is {"On": "false"} and msg3.payload is {"On": "true"}, but I am getting tangled up.

---

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [29 January 2020 10:30 UTC](https://discourse.nodered.org/t/constructing-multiple-outputs/20988/2 "2020-01-29T10:30:36Z")

</div>

Not bad for a newbie.

So what you need to do is build an output array too.

So you have the three _checks_.

I am **not** a programmer. But from your code:

```auto
for (i = 0; i < inputArray.length; i++) {
    if (inputArray[i] == switchedOn) {
        outmsg.payload={"On": "true"};
    }else{
        outmsg.payload={"On": "false"};
    }
    outputArray.push(outmsg.payload);
}

```

Make it something like:

```auto
for (i = 0; i < inputArray.length; i++) {
    if (inputArray[i] == switchedOn) {
        outmsg[i].payload={"On": "true"}; // look at what I did here.
    }else{
        outmsg[i].payload={"On": "false"}; // and here.
    }
    outputArray.push(outmsg.payload);
}

```

That way you have an `outmsg[i]` array.

Then at the end you do:

`return [outmsg[0].payload,outmsg[1].payload, outmsg[2].payload]`

Basically it is:  
`return [payload1, payload2, payload3]`

And you have to set the node to have 3 outputs.

Again, I shall stress: I do not know how to write code.  
But that is basically how you would do it.

Others could possibly reply and correct my mistake.

Good luck and enjoy Node-Red.

---

<div class="post-metadata">

**Author:** ![kuema](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/kuema/32/6542_2.png) [@kuema](https://discourse.nodered.org/u/kuema)\
**Post date:** [29 January 2020 11:09 UTC](https://discourse.nodered.org/t/constructing-multiple-outputs/20988/3 "2020-01-29T11:09:56Z")

</div>

There are two common mistakes.

1. You are using the same message and thus overwriting the previous payload.
2. to feed multiple outputs, a complete message (including payload) is required, you just push the payload

So something like this should work (not tested):

```auto
for (i = 0; i < inputArray.length; i++) {
    let outmsg = {}; // create new message object for each output
    if (inputArray[i] == switchedOn) {
        outmsg.payload={"On": "true"};
    }else{
        outmsg.payload={"On": "false"};
    }
    outputArray.push(outmsg); // output the complete message object
}

```

Alternatively, you could reuse the input message and clone it with `RED.util.cloneMessage(msg)` each time. That way you can preserve existing properties.

---

<div class="post-metadata">

**Author:** ![lorccan](https://avatars.discourse-cdn.com/v4/letter/l/278dde/32.png) [@lorccan](https://discourse.nodered.org/u/lorccan)\
**Post date:** [29 January 2020 14:29 UTC](https://discourse.nodered.org/t/constructing-multiple-outputs/20988/4 "2020-01-29T14:29:11Z")

</div>

Aha!

Thank you. I'd been really tangled-up with this, but I get it now.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [29 March 2020 14:31 UTC](https://discourse.nodered.org/t/constructing-multiple-outputs/20988/6 "2020-03-29T14:31:04Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
