Jack M
Jack M

Reputation: 2574

sum of items in a multidimensional array in typescript

I have the following array:

const response = [{
    name: "ISA Portfolio",
    value: 0,
    count: 1
  },
  {
    name: "ISA Cash",
    value: 0,
    count: 1
  },
  {
    name: "Bank 1 Year Fixed",
    value: 149058.15234375,
    count: 2
  },
  {
    name: "1 Year Fixed",
    value: 167488.0546875,
    count: 2
  },
  {
    name: "t Bank 1 Year Fixed",
    value: 250223.4375,
    count: 3
  },
  {
    name: "M Bank 1 Year Fixed Term",
    value: 149222.48828125,
    count: 2
  },
  {
    name: "Jr",
    value: 768930.5625,
    count: 1
  },
  {
    name: "I Income Bond",
    value: 400486.1875,
    count: 3
  },
  {
    name: "In 1 Year Fixed",
    value: 83620.2734375,
    count: 1
  },
  {
    name: "I 3 Year Guaranteed Income Bond",
    value: 140000,
    count: 1
  },
  {
    name: "I 1 Year Guaranteed Growth Bond",
    value: 600000,
    count: 2
  },
  {
    name: "Co",
    value: 46382.26171875,
    count: 1
  },
  {
    name: "Management",
    value: 1113677,
    count: 1
  },
  {
    name: "Cs & Co",
    value: 973906,
    count: 1
  },
  {
    name: "C Fund",
    value: 82389.640625,
    count: 1
  },
  {
    name: "I 3 Year Guaranteed Growth Bond",
    value: 250000,
    count: 1
  },
  {
    name: "S Saver",
    value: 85194.953125,
    count: 1
  }
]


const sum = response.reduce(function(a, b) {
  (a[b.value] ? a[b.value] += b.value : a[b.value] = b.value);
  return a;
}, {});

console.log(sum);

but this returns the value only in an object and not the sum. Can you please help. Thanks

Upvotes: 0

Views: 394

Answers (1)

Kunal Mukherjee
Kunal Mukherjee

Reputation: 5853

Just map over the .value property first and reduce it later:

const response = [{
    name: "ISA Portfolio",
    value: 0,
    count: 1
  },
  {
    name: "ISA Cash",
    value: 0,
    count: 1
  },
  {
    name: "Bank 1 Year Fixed",
    value: 149058.15234375,
    count: 2
  },
  {
    name: "1 Year Fixed",
    value: 167488.0546875,
    count: 2
  },
  {
    name: "t Bank 1 Year Fixed",
    value: 250223.4375,
    count: 3
  },
  {
    name: "M Bank 1 Year Fixed Term",
    value: 149222.48828125,
    count: 2
  },
  {
    name: "Jr",
    value: 768930.5625,
    count: 1
  },
  {
    name: "I Income Bond",
    value: 400486.1875,
    count: 3
  },
  {
    name: "In 1 Year Fixed",
    value: 83620.2734375,
    count: 1
  },
  {
    name: "I 3 Year Guaranteed Income Bond",
    value: 140000,
    count: 1
  },
  {
    name: "I 1 Year Guaranteed Growth Bond",
    value: 600000,
    count: 2
  },
  {
    name: "Co",
    value: 46382.26171875,
    count: 1
  },
  {
    name: "Management",
    value: 1113677,
    count: 1
  },
  {
    name: "Cs & Co",
    value: 973906,
    count: 1
  },
  {
    name: "C Fund",
    value: 82389.640625,
    count: 1
  },
  {
    name: "I 3 Year Guaranteed Growth Bond",
    value: 250000,
    count: 1
  },
  {
    name: "S Saver",
    value: 85194.953125,
    count: 1
  }
]


const sum = response.map(x => x.value).reduce((a, b) => a + b);

console.log(sum);

Upvotes: 1

Related Questions