# Sum of object values

**URL:** <https://discourse.nodered.org/t/sum-of-object-values/42075>\
**Category:** General\
**Created:** [5 March 2021 09:41 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075 "2021-03-05T09:41:38Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Spyker](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@Spyker](https://discourse.nodered.org/u/Spyker)\
**Post date:** [5 March 2021 09:41 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/1 "2021-03-05T09:41:38Z")

</div>

Hi All,

I'm working on a project to monitor my test crypto trading bots. And there is one thing left I didn't succeed in fixing.

The bot output is sending me all current positions, in my case 1 to a maximum of 15. But I need some way to make a sum and present me with one total value 🙂

In this case, I want to calculate the sum of,  
payload.currentPositions.DCA[0].totalCost  
payload.currentPositions.DCA[1].totalCost  
payload.currentPositions.DCA[2].totalCost  
can be up to payload.currentPositions.DCA[15].totalCost

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/d/ad5091fa42408fbffd6c8242085411bf1ec99d85.png)

How can I calculate this within a function?

Thanks!

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [5 March 2021 10:07 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/2 "2021-03-05T10:07:15Z")

</div>

You should be able to use `Array.reduce()` for this. [Array.prototype.reduce() - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)

---

<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:** [5 March 2021 10:12 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/3 "2021-03-05T10:12:51Z")

</div>

Or Jsonata in a change node.  
example expression

```auto
$sum(payload.currentPositions.DCA[].totalCost)

```

---

<div class="post-metadata">

**Author:** ![Spyker](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@Spyker](https://discourse.nodered.org/u/Spyker)\
**Post date:** [5 March 2021 10:28 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/4 "2021-03-05T10:28:25Z")

</div>

Epic! This is an eye-opener for me.. Thanks @E1cid and @Colin

---

<div class="post-metadata">

**Author:** ![Spyker](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@Spyker](https://discourse.nodered.org/u/Spyker)\
**Post date:** [5 March 2021 19:46 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/5 "2021-03-05T19:46:09Z")

</div>

Unfortunately I could not make it work with the Jsonata because I have to send all data in one session to my spreadsheet, and I could not join both Jsonata's in the change node..

So I had another look at @Colin his example, but have some difficulties with this one. I tried:

let initialValue = 0  
let sum = [{x: msg.payload.currentPositions.DCA[0].currentValue}, {x: msg.payload.currentPositions.DCA[1].currentValue}, {x: msg.payload.currentPositions.DCA[2].currentValue}, {x: msg.payload.currentPositions.DCA[3].currentValue}].reduce(function (accumulator, currentValue) {  
return accumulator + currentValue.x  
}, initialValue)

msg.payload ={};  
msg.payload = sum

But there are between 0 and 15 DCA's open at a certain time, so I could just add the msg.payload.currentPositions.DCA.currentValue} 15 times, but if the object does not exists, it stops with error "TypeError: Cannot read property 'currentValue' of undefined".  
Is there some way to make this more smart? 🙂  
Thanks!

---

<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:** [5 March 2021 20:10 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/6 "2021-03-05T20:10:14Z")

</div>

> [@Spyker](#):
>
> Unfortunately I could not make it work with the Jsonata because I have to send all data in one session to my spreadsheet, and I could not join both Jsonata's in the change node..

What other JSONata expression did you wish to join?  
And what format should they be joined?

---

<div class="post-metadata">

**Author:** ![Spyker](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@Spyker](https://discourse.nodered.org/u/Spyker)\
**Post date:** [5 March 2021 20:15 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/7 "2021-03-05T20:15:43Z")

</div>

$sum(payload.currentPositions.DCA.totalCost)  
$sum(payload.currentPositions.DCA.currentValue)  
$sum(payload.currentPositions.PAIRS.totalCost)  
$sum(payload.currentPositions.PAIRS.currentValue)

---

<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:** [5 March 2021 20:17 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/8 "2021-03-05T20:17:02Z")

</div>

what format, comma seperated or json etc?

---

<div class="post-metadata">

**Author:** ![Spyker](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@Spyker](https://discourse.nodered.org/u/Spyker)\
**Post date:** [5 March 2021 20:21 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/9 "2021-03-05T20:21:56Z")

</div>

In Json if that would be possible 🙂

---

<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:** [5 March 2021 20:27 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/10 "2021-03-05T20:27:14Z")

</div>

```

```auto
{"key1": $sum(payload.currentPositions.DCA[].totalCost),
"key2": $sum(payload.currentPositions.DCA[].currentValue),
"key3": $sum(payload.currentPositions.PAIRS[].totalCost),
"key4": $sum(payload.currentPositions.PAIRS[].currentValue) }

```

```  
notice backticks , they present code in easy form to copy, and prevent forum corrupting code. Please remember to use these in future posting, to make life easier

---

<div class="post-metadata">

**Author:** ![Spyker](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@Spyker](https://discourse.nodered.org/u/Spyker)\
**Post date:** [7 March 2021 11:06 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/11 "2021-03-07T11:06:49Z")

</div>

Thanks @E1cid This works perfectly 🙂

---

<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:** [21 March 2021 11:07 UTC](https://discourse.nodered.org/t/sum-of-object-values/42075/12 "2021-03-21T11:07:20Z")

</div>

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