# If else if case statements

**URL:** <https://discourse.nodered.org/t/if-else-if-case-statements/34794>\
**Category:** General\
**Created:** [25 October 2020 20:25 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794 "2020-10-25T20:25:53Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![RollsFPV](https://avatars.discourse-cdn.com/v4/letter/r/ecccb3/32.png) [@RollsFPV](https://discourse.nodered.org/u/RollsFPV)\
**Post date:** [25 October 2020 20:25 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/1 "2020-10-25T20:25:53Z")

</div>

Hi I am trying to work out how to do a case in a function.

I am getting a number from a modbus device and i need to output a text message depending on what number is received. Below is what i currently have but get error that output is a string...

> Blockquote  
> var payload = msg.payload.ChargeState;  
> if (payload == "0")  
> {  
> return "START";  
> }  
> if (payload == "1")  
> {  
> return "NIGHT\_CHECK";  
> }  
> if (payload == "2")  
> {  
> return "DISCONNECT";  
> }  
> if (payload == "3")  
> {  
> return "NIGHT";  
> }  
> if (payload == "4")  
> {  
> return "FAULT";  
> }  
> if (payload == "5")  
> {  
> return "MPPT";  
> }  
> if (payload == "6")  
> {  
> return "ABSORPTION";  
> }  
> if (payload == "7")  
> {  
> return "FLOAT";  
> }  
> if (payload == "8")  
> {  
> return "EQUALIZE";  
> }  
> if (payload == "9")  
> {  
> return "SLAVE";  
> }  
> msg.payload = char(payload);  
> return msg;

As you can see if for example i get a 5 i want the output to say MPPT..

Any assistance would be muchly appreciated.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [25 October 2020 20:29 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/2 "2020-10-25T20:29:33Z")

</div>

> [@RollsFPV](#):
>
> return "SLAVE";

You can't return a string.

you could set msg.payload and return msg at the end or return a new object with payload set.

e.g...

```auto
var payload = msg.payload.ChargeState;
if (payload == "0") {
  msg.payload = "START";
} else if (payload == "1") {
  msg.payload = "NIGHT_CHECK";
} else if (payload == "2") {
  msg.payload = "DISCONNECT";
} else if (payload == "3") {
  msg.payload = "NIGHT";
} else if (payload == "4") {
  msg.payload = "FAULT";
} else if (payload == "5") {
  msg.payload = "MPPT";
} else if (payload == "6") {
  msg.payload = "ABSORPTION";
} else if (payload == "7") {
  msg.payload = "FLOAT";
} else if (payload == "8") {
  msg.payload = "EQUALIZE";
} else if (payload == "9") {
  msg.payload = "SLAVE";
} else {
  msg.payload = char(payload);
}
return msg;

```

HOWEVER, I would recommend a [switch](https://www.w3schools.com/js/js_switch.asp) statement instead.

---

<div class="post-metadata">

**Author:** ![RollsFPV](https://avatars.discourse-cdn.com/v4/letter/r/ecccb3/32.png) [@RollsFPV](https://discourse.nodered.org/u/RollsFPV)\
**Post date:** [25 October 2020 20:33 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/3 "2020-10-25T20:33:32Z")

</div>

So if i understand you i mean something like

> Blockquote

if (payload == 5)  
{  
payload = "MPPT"  
}

return msg;

---

<div class="post-metadata">

**Author:** ![RollsFPV](https://avatars.discourse-cdn.com/v4/letter/r/ecccb3/32.png) [@RollsFPV](https://discourse.nodered.org/u/RollsFPV)\
**Post date:** [25 October 2020 20:43 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/4 "2020-10-25T20:43:00Z")

</div>

Cheers thanks heaps for that, still trying to to get my head round node red programming. Out of interest how would i do it with a switch statement, or can you point me to where i can learn about it..

Thanks heaps mate

---

<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:** [25 October 2020 20:48 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/5 "2020-10-25T20:48:25Z")

</div>

If you want to be a bit more ...... (something)

This could work, but it is a bit _expensive_ on nodes used:

```auto
[{"id":"72ae34f0.65d9d4","type":"function","z":"88de1ac2.8b8c38","name":"input","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":170,"y":1120,"wires":[["c63e0b7c.ec595"]]},{"id":"c63e0b7c.ec595","type":"switch","z":"88de1ac2.8b8c38","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":320,"y":1120,"wires":[["4cae4b0d.a33c2c"],["9e8080df.540138"],["45ea1d3.9a016e4"],["f51a055f.3f8f3"]]},{"id":"4cae4b0d.a33c2c","type":"change","z":"88de1ac2.8b8c38","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":1060,"wires":[["daf9c9fd.2fd488"]]},{"id":"9e8080df.540138","type":"change","z":"88de1ac2.8b8c38","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":1090,"wires":[["daf9c9fd.2fd488"]]},{"id":"45ea1d3.9a016e4","type":"change","z":"88de1ac2.8b8c38","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":1120,"wires":[["daf9c9fd.2fd488"]]},{"id":"f51a055f.3f8f3","type":"change","z":"88de1ac2.8b8c38","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":1150,"wires":[["daf9c9fd.2fd488"]]},{"id":"daf9c9fd.2fd488","type":"function","z":"88de1ac2.8b8c38","name":"output","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":720,"y":1110,"wires":[[]]}]

```

Just to say.

---

<div class="post-metadata">

**Author:** ![RollsFPV](https://avatars.discourse-cdn.com/v4/letter/r/ecccb3/32.png) [@RollsFPV](https://discourse.nodered.org/u/RollsFPV)\
**Post date:** [25 October 2020 20:53 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/6 "2020-10-25T20:53:27Z")

</div>

ahh ok sweet, thanks... food for thought

---

<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:** [25 October 2020 20:54 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/7 "2020-10-25T20:54:38Z")

</div>

It is just that way it (maybe) helps you see what is going on, but @Steve-Mcl way is neater and more compact.

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [25 October 2020 22:24 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/8 "2020-10-25T22:24:34Z")

</div>

Some more food  
Another method

```auto
let values = {"0":"START",
            "1": "NIGHT_CHECK",
            "2": "DISCONNECT",
            "3": "NIGHT",
            "4": "FAULT", 
            "5": "MPPT",
            "6": "ABSORPTION",
            "7": "FLOAT",
            "8": "EQUALIZE",
            "9": "SLAVE"}
let chargeState = msg.payload.ChargeState.toString();
if ( Object.keys(values).includes(chargeState)){
msg.payload = values[chargeState];
}
else{
  msg.payload = msg.payload.ChargeState;
}
return msg;

```

---

<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:** [25 October 2020 22:50 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/9 "2020-10-25T22:50:18Z")

</div>

I think that may help me with a problem I have on another topic.

Thanks!

---

<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:** [24 December 2020 22:50 UTC](https://discourse.nodered.org/t/if-else-if-case-statements/34794/10 "2020-12-24T22:50:19Z")

</div>

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