# Adding up a number of objects

**URL:** <https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807>\
**Category:** General\
**Created:** [18 December 2023 13:28 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807 "2023-12-18T13:28:10Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [18 December 2023 13:28 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/1 "2023-12-18T13:28:10Z")

</div>

Hi, I want to add my consumption from the last 12 month.  
so I get a very long formula:

```auto
let Kosten = msg.payload[0].cost + msg.payload[1].cost + msg.payload[2].cost + msg.payload[3].cost + msg.payload[4].cost + msg.payload[5].cost + msg.payload[6].cost + msg.payload[7].cost + msg.payload[8].cost + msg.payload[9].cost + msg.payload[10].cost + msg.payload[11].cost;

let Verbrauch = msg.payload[0].consumption + msg.payload[1].consumption + msg.payload[2].consumption + msg.payload[3].consumption + msg.payload[4].consumption + msg.payload[5].consumption + msg.payload[6].consumption + msg.payload[7].consumption + msg.payload[8].consumption + msg.payload[9].consumption + msg.payload[10].consumption + msg.payload[11].consumption;

```

if the last object is missing =\> error

**Is there a trick/formula to just add up the number of objects that are incoming / present?**

---

<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:** [18 December 2023 13:41 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/2 "2023-12-18T13:41:13Z")

</div>

Have a look at [array.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)

```auto
let Kosten = msg.payload.reduce((acc,obj) => acc += obj.cost, 0)

```

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [18 December 2023 14:05 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/3 "2023-12-18T14:05:57Z")

</div>

> [@E1cid](#):
>
> `let Kosten = msg.payload.reduce((acc,obj) => acc += obj.cost, 0)`

hm, no answere from this.

Here is the input:

```auto
[{"from":"2023-01-01T00:00:00.000+01:00","cost":107.9644096335,"unitPrice":0.21972,"consumption":491.372},{"from":"2023-02-01T00:00:00.000+01:00","cost":37.1151410147,"unitPrice":0.220789,"consumption":168.102},{"from":"2023-03-01T00:00:00.000+01:00","cost":9.2954857464,"unitPrice":0.228925,"consumption":40.605},{"from":"2023-04-01T00:00:00.000+02:00","cost":1.2290573232,"unitPrice":0.24194,"consumption":5.08},{"from":"2023-05-01T00:00:00.000+02:00","cost":0.8601506949,"unitPrice":0.229312,"consumption":3.751},{"from":"2023-06-01T00:00:00.000+02:00","cost":0.598018673,"unitPrice":0.228688,"consumption":2.615},{"from":"2023-07-01T00:00:00.000+02:00","cost":-9.5399015481,"unitPrice":-0.273907,"consumption":34.829},{"from":"2023-08-01T00:00:00.000+02:00","cost":1.428502299,"unitPrice":0.22765,"consumption":6.275},{"from":"2023-09-01T00:00:00.000+02:00","cost":1.1379060721,"unitPrice":0.208675,"consumption":5.453},{"from":"2023-10-01T00:00:00.000+02:00","cost":3.0323304039,"unitPrice":0.214193,"consumption":14.157},{"from":"2023-11-01T00:00:00.000+01:00","cost":54.8661958705,"unitPrice":0.200132,"consumption":274.15}]

```

---

<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:** [18 December 2023 14:19 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/4 "2023-12-18T14:19:43Z")

</div>

Sure there is , did you forget to add it to the msg object  
e.g

```auto
[{"id":"acb2384ee87c80c1","type":"inject","z":"d1395164b4eec73e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"from\":\"2023-01-01T00:00:00.000+01:00\",\"cost\":107.9644096335,\"unitPrice\":0.21972,\"consumption\":491.372},{\"from\":\"2023-02-01T00:00:00.000+01:00\",\"cost\":37.1151410147,\"unitPrice\":0.220789,\"consumption\":168.102},{\"from\":\"2023-03-01T00:00:00.000+01:00\",\"cost\":9.2954857464,\"unitPrice\":0.228925,\"consumption\":40.605},{\"from\":\"2023-04-01T00:00:00.000+02:00\",\"cost\":1.2290573232,\"unitPrice\":0.24194,\"consumption\":5.08},{\"from\":\"2023-05-01T00:00:00.000+02:00\",\"cost\":0.8601506949,\"unitPrice\":0.229312,\"consumption\":3.751},{\"from\":\"2023-06-01T00:00:00.000+02:00\",\"cost\":0.598018673,\"unitPrice\":0.228688,\"consumption\":2.615},{\"from\":\"2023-07-01T00:00:00.000+02:00\",\"cost\":-9.5399015481,\"unitPrice\":-0.273907,\"consumption\":34.829},{\"from\":\"2023-08-01T00:00:00.000+02:00\",\"cost\":1.428502299,\"unitPrice\":0.22765,\"consumption\":6.275},{\"from\":\"2023-09-01T00:00:00.000+02:00\",\"cost\":1.1379060721,\"unitPrice\":0.208675,\"consumption\":5.453},{\"from\":\"2023-10-01T00:00:00.000+02:00\",\"cost\":3.0323304039,\"unitPrice\":0.214193,\"consumption\":14.157},{\"from\":\"2023-11-01T00:00:00.000+01:00\",\"cost\":54.8661958705,\"unitPrice\":0.200132,\"consumption\":274.15}]","payloadType":"json","x":90,"y":2760,"wires":[["63288222d43f6855"]]},{"id":"63288222d43f6855","type":"function","z":"d1395164b4eec73e","name":"function 149","func":"let Kosten = msg.payload.reduce((acc,obj)=> acc += obj.cost, 0)\nmsg.payload = Kosten\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":2820,"wires":[["ee0c6359eb5ba6e4"]]},{"id":"ee0c6359eb5ba6e4","type":"debug","z":"d1395164b4eec73e","name":"debug 2462","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":450,"y":2760,"wires":[]}]

```

output in payload  
`207.98729618310003`

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [18 December 2023 14:40 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/5 "2023-12-18T14:40:06Z")

</div>

Now it runs, thank you

my solution:

```auto
[
    {
        "id": "63288222d43f6855",
        "type": "function",
        "z": "a85445c69706ecc9",
        "name": "Jahresauswertung",
        "func": "let Kosten = msg.payload.reduce((acc,obj)=> acc += obj.cost, 0)\nlet Bezug = msg.payload.reduce((acc,obj)=> acc += obj.consumption, 0)\nlet Preis = Kosten/Bezug *100;\nPreis = parseFloat(Preis.toFixed(2));\nKosten = parseFloat(Kosten.toFixed(2));\nBezug = parseFloat(Bezug.toFixed(2));\nmsg.payload = {Kosten,Bezug,Preis};\nmsg.topic = \"Jahresauswertung\";\nreturn msg",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 730,
        "y": 900,
        "wires": [
            []
        ]
    }
]

```

---

<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:** [18 December 2023 14:43 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/6 "2023-12-18T14:43:53Z")

</div>

> [@Becker](#):
>
> Now it runs,

What do you mean, there is no change in the expression, so it must have worked before.

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [18 December 2023 15:10 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/7 "2023-12-18T15:10:59Z")

</div>

I don´t know 😆  
maybe the tibber api query was not successfull.

Do you know why monaco is angry:  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/2/4/240b952de95dc333204da9267240aa1d0269dae7.png)

---

<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:** [18 December 2023 15:38 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/8 "2023-12-18T15:38:47Z")

</div>

It is not an error (angry) as the message is just informing you that the parameter is of type any. You may ignore it.

---

<div class="post-metadata">

**Author:** ![shrickus](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/shrickus/32/517_2.png) [@shrickus](https://discourse.nodered.org/u/shrickus)\
**Post date:** [19 December 2023 03:08 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/9 "2023-12-19T03:08:05Z")

</div>

I would probably use a `change` node and the following JSONata expression:

```auto
$sum(payload.cost)

```

That should find all the cost values on the array of payload objects, add them together, and return the sum in `msg.payload` (but i did not test it)...

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [19 December 2023 07:30 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/10 "2023-12-19T07:30:00Z")

</div>

> [@shrickus](#):
>
> `$sum(payload.cost)`

this works too, thank you

---

<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:** [17 February 2024 07:30 UTC](https://discourse.nodered.org/t/adding-up-a-number-of-objects/83807/11 "2024-02-17T07:30:19Z")

</div>

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