# Why does concat give back empty value?

**URL:** <https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617>\
**Category:** General\
**Tags:** function-node\
**Created:** [30 April 2024 19:20 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617 "2024-04-30T19:20:35Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![novski](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/novski/32/23243_2.png) [@novski](https://discourse.nodered.org/u/novski)\
**Post date:** [30 April 2024 19:20 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/1 "2024-04-30T19:20:35Z")

</div>

This .concat function does not work.

```auto
let device = {"spot1":{"value":
[1,1]
}};
let k = "spot1";
let value = [];
node.warn("value:" + value + ", typeof value:" + typeof value);
if (typeof device[k].value === 'number') {
    node.warn("=number device[k].value:" + device[k].value);
    value.push(device[k].value);
    node.warn("=number value:" + value);
} else {
    node.warn("=else device[k].value:" + device[k].value + ", typeof device[k].value:" + typeof device[k].value);
    value.concat(device[k].value); // <-- this concat does not work
    node.warn("=else value:" + value + ", typeof value:" + typeof value);
}
node.warn("value:" + value + ", typeof value:" + typeof value);
node.warn(device[k].value);
return msg;

```

example:

```auto
[
    {
        "id": "a48e4c1ee433cb0e",
        "type": "function",
        "z": "cbf7f47c.caccc8",
        "name": "",
        "func": "let device = {\"spot1\":{\"value\":\n[1,1]\n}};\nlet k = \"spot1\";\nlet value = [];\nnode.warn(\"value:\" + value + \", typeof value:\" + typeof value);\nif (typeof device[k].value === 'number') {\n node.warn(\"=number device[k].value:\" + device[k].value);\n value.push(device[k].value);\n node.warn(\"=number value:\" + value);\n} else {\n node.warn(\"=else device[k].value:\" + device[k].value + \", typeof device[k].value:\" + typeof device[k].value);\n value.concat(device[k].value); // <-- this concat does not work\n node.warn(\"=else value:\" + value + \", typeof value:\" + typeof value);\n}\nnode.warn(\"value:\" + value + \", typeof value:\" + typeof value);\nnode.warn(device[k].value);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3670,
        "y": 4720,
        "wires": [
            [
                "e92bb1ca62f3b46b"
            ]
        ]
    },
    {
        "id": "e92bb1ca62f3b46b",
        "type": "debug",
        "z": "cbf7f47c.caccc8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 3860,
        "y": 4720,
        "wires": []
    },
    {
        "id": "71d609dcf5757665",
        "type": "inject",
        "z": "cbf7f47c.caccc8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 3480,
        "y": 4720,
        "wires": [
            [
                "a48e4c1ee433cb0e"
            ]
        ]
    }
]

```

What is the reason that concat does not add 1,1 to the empty array named "value"?

---

<div class="post-metadata">

**Author:** ![arturv2000](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/arturv2000/32/88724_2.png) [@arturv2000](https://discourse.nodered.org/u/arturv2000)\
**Post date:** [30 April 2024 19:27 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/2 "2024-04-30T19:27:56Z")

</div>

Because concat returns a new array, does not update the array.

[Javascrip Array.Concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)

---

<div class="post-metadata">

**Author:** ![novski](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/novski/32/23243_2.png) [@novski](https://discourse.nodered.org/u/novski)\
**Post date:** [30 April 2024 19:38 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/3 "2024-04-30T19:38:35Z")

</div>

What does that mean?  
My base is empty and the injected array is [1,1]  
Even with a new Array it should return my injected [1,1] ?  
MDN shows that behaviour...

 ![Bildschirmfoto 2024-04-30 um 21.37.11](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/8/a87a469ab1f36a8a2f0a5bcf2c0004f6a160d1c6.png)

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [30 April 2024 19:41 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/4 "2024-04-30T19:41:03Z")

</div>

in the `else` statement which is where your code goes when it runs  
`value` is empty array `[]` because of `let value = [];`  
and you concat `device[k].value` which is `device['spot1'].value` which in turn is `[1,1]`

so basically with `value.concat(device[k].value)` you do `[].concat([1,1])` and you get `[1,1]` as expected

---

<div class="post-metadata">

**Author:** ![novski](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/novski/32/23243_2.png) [@novski](https://discourse.nodered.org/u/novski)\
**Post date:** [30 April 2024 19:46 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/5 "2024-04-30T19:46:47Z")

</div>

> [@UnborN](#):
>
> `[1,1]` as expected

I don't get that! Does it on your side?  
Is it NR Version related? My Version is 2.1.6

 ![Bildschirmfoto 2024-04-30 um 21.44.12](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/7/e/7ee683636547fe461915c036d39e5cf60349bc73.png)  
The pointed places are empty.

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [30 April 2024 19:51 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/6 "2024-04-30T19:51:02Z")

</div>

hmm .. i see .. maybe you need to use `JSON.stringify(value)`

`node.warn("=else value:" + JSON.stringify(value) + ", typeof value:" + typeof value);`

---

<div class="post-metadata">

**Author:** ![novski](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/novski/32/23243_2.png) [@novski](https://discourse.nodered.org/u/novski)\
**Post date:** [30 April 2024 20:05 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/7 "2024-04-30T20:05:50Z")

</div>

> [@UnborN](#):
>
> JSON.stringify(value)

No, that does not help.  
If I change the debug node to msg.value it is completely "undefined".  
And i have the same behaviour with NRv3.1.5

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [30 April 2024 20:08 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/8 "2024-04-30T20:08:10Z")

</div>

did you assign `msg.value` to be equal to `value` before returning the msg ?

btw stringify was just a suggestion to be able to see the value with `node.warn`

---

<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:** [30 April 2024 20:21 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/9 "2024-04-30T20:21:00Z")

</div>

> [@novski](#):
>
> ![Bildschirmfoto 2024-04-30 um 21.37.11](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/8/a87a469ab1f36a8a2f0a5bcf2c0004f6a160d1c6.png)
> 
> Bildschirmfoto 2024-04-30 um 21.37.111070×778 41.3 KB

Why have you ignored what @arturv2000 posted.  
It clearly shows you need to asssign the concat to a var  
e.g.

```auto
let new_value = value.concat(device[k].value);

```

---

<div class="post-metadata">

**Author:** ![piwi447](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/piwi447/32/67335_2.png) [@piwi447](https://discourse.nodered.org/u/piwi447)\
**Post date:** [30 April 2024 20:44 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/10 "2024-04-30T20:44:47Z")

</div>

Hello,  
As said prieviously by Arthur,  
Array1.concat(array2) does not change array1  
So if you want to update value you need to update value with the result of value.concat() function  
Hope it helps

Pierre

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [30 April 2024 21:10 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/11 "2024-04-30T21:10:49Z")

</div>

yes .. that was a problem also that i later realized.  
well .. It was a combination of issues 😉

---

<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:** [14 May 2024 21:11 UTC](https://discourse.nodered.org/t/why-does-concat-give-back-empty-value/87617/12 "2024-05-14T21:11:40Z")

</div>

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