sfarzoso
sfarzoso

Reputation: 1610

Trying to sum array of objects using conditions

Suppose I've an array which contains the following objects:

{ home: 0, away: 1, value: 7.371215599659567 }
{ home: 0, away: 2, value: 8.216563231723296 }
{ home: 0, away: 3, value: 6.168310325432516 }
{ home: 0, away: 4, value: 3.5073431380070055 }
{ home: 0, away: 5, value: 1.6104197237111348 }
{ home: 0, away: 6, value: 0.6215879547521032 }
{ home: 1, away: 0, value: 3.6824984689062354 }
{ home: 1, away: 1, value: 8.276413244141352 }
{ home: 1, away: 2, value: 9.393263752817953 }
{ home: 1, away: 3, value: 7.174679043260096 }
{ home: 1, away: 4, value: 4.146565482578415 }
{ home: 1, away: 5, value: 1.9328356809373288 }
{ home: 1, away: 6, value: 0.7563380262857585 }
{ home: 2, away: 0, value: 2.097379162309316 }
{ home: 2, away: 1, value: 4.796821176334703 }
{ home: 2, away: 2, value: 5.534669783150271 }
{ home: 2, away: 3, value: 4.2926916030788105 }
{ home: 2, away: 4, value: 2.515879239794918 }
{ home: 2, away: 5, value: 1.187567428237771 }
{ home: 2, away: 6, value: 0.4699201039387404 }
{ home: 3, away: 0, value: 0.8211845706155819 }
{ home: 3, away: 1, value: 1.9075353125788463 }
{ home: 3, away: 2, value: 2.2325407930142736 }
{ home: 3, away: 3, value: 1.7539581905097126 }
{ home: 3, away: 4, value: 1.0397854130494248 }
{ home: 3, away: 5, value: 0.49576148435142064 }
{ home: 3, away: 6, value: 0.19789157500581256 }
{ home: 4, away: 0, value: 0.24773516000500195 }
{ home: 4, away: 1, value: 0.5830691164647543 }
{ home: 4, away: 2, value: 0.6904477295864787 }
{ home: 4, away: 3, value: 0.5480588412313669 }
{ home: 4, away: 4, value: 0.3278306643240631 }
{ home: 4, away: 5, value: 0.15752158873111574 }
{ home: 4, away: 6, value: 0.06329504444770173 }
{ home: 5, away: 0, value: 0.061151126935764334 }
{ home: 5, away: 1, value: 0.14545542986663187 }
{ home: 5, away: 2, value: 0.17383966843362755 }
{ home: 5, away: 3, value: 0.13909400923467197 }
{ home: 5, away: 4, value: 0.08377178524032308 }
{ home: 5, away: 5, value: 0.040486670771772315 }
{ home: 5, away: 6, value: 0.016348423714773092 }
{ home: 6, away: 0, value: 0.012806909587366471 }
{ home: 6, away: 1, value: 0.030713983064227724 }
{ home: 6, away: 2, value: 0.0369671174487187 }
{ home: 6, away: 3, value: 0.029756524980091948 }
{ home: 6, away: 4, value: 0.018012700795413502 }
{ home: 6, away: 5, value: 0.008742842144856435 }
{ home: 6, away: 6, value: 0.00354304640928744 }

I would like to sum all the values that have home greather than 0, and away less than home, so I did:

let matrix = [
  { home: 0, away: 0, value: 3.3406433795989217 },
  { home: 0, away: 1, value: 7.371215599659567 },
  { home: 0, away: 2, value: 8.216563231723296 },
  { home: 0, away: 3, value: 6.168310325432516 },
  { home: 0, away: 4, value: 3.5073431380070055 },
  { home: 0, away: 5, value: 1.6104197237111348 },
  { home: 0, away: 6, value: 0.6215879547521032 },
  { home: 1, away: 0, value: 3.6824984689062354 },
  { home: 1, away: 1, value: 8.276413244141352 },
  { home: 1, away: 2, value: 9.393263752817953 },
  { home: 1, away: 3, value: 7.174679043260096 },
  { home: 1, away: 4, value: 4.146565482578415 },
  { home: 1, away: 5, value: 1.9328356809373288 },
  { home: 1, away: 6, value: 0.7563380262857585 },
  { home: 2, away: 0, value: 2.097379162309316 },
  { home: 2, away: 1, value: 4.796821176334703 },
  { home: 2, away: 2, value: 5.534669783150271 },
  { home: 2, away: 3, value: 4.2926916030788105 },
  { home: 2, away: 4, value: 2.515879239794918 },
  { home: 2, away: 5, value: 1.187567428237771 },
  { home: 2, away: 6, value: 0.4699201039387404 },
  { home: 3, away: 0, value: 0.8211845706155819 },
  { home: 3, away: 1, value: 1.9075353125788463 },
  { home: 3, away: 2, value: 2.2325407930142736 },
  { home: 3, away: 3, value: 1.7539581905097126 },
  { home: 3, away: 4, value: 1.0397854130494248 },
  { home: 3, away: 5, value: 0.49576148435142064 },
  { home: 3, away: 6, value: 0.19789157500581256 },
  { home: 4, away: 0, value: 0.24773516000500195 },
  { home: 4, away: 1, value: 0.5830691164647543 },
  { home: 4, away: 2, value: 0.6904477295864787 },
  { home: 4, away: 3, value: 0.5480588412313669 },
  { home: 4, away: 4, value: 0.3278306643240631 },
  { home: 4, away: 5, value: 0.15752158873111574 },
  { home: 4, away: 6, value: 0.06329504444770173 },
  { home: 5, away: 0, value: 0.061151126935764334 },
  { home: 5, away: 1, value: 0.14545542986663187 },
  { home: 5, away: 2, value: 0.17383966843362755 },
  { home: 5, away: 3, value: 0.13909400923467197 },
  { home: 5, away: 4, value: 0.08377178524032308 },
  { home: 5, away: 5, value: 0.040486670771772315 },
  { home: 5, away: 6, value: 0.016348423714773092 },
  { home: 6, away: 0, value: 0.012806909587366471 },
  { home: 6, away: 1, value: 0.030713983064227724 },
  { home: 6, away: 2, value: 0.0369671174487187 },
  { home: 6, away: 3, value: 0.029756524980091948 },
  { home: 6, away: 4, value: 0.018012700795413502 },
  { home: 6, away: 5, value: 0.008742842144856435 },
  { home: 6, away: 6, value: 0.00354304640928744 }
];

let c = matrix.reduce((acc, curr) => {
    return acc += (acc.home > 0 && curr.away < acc.home) ? acc.value + curr.value : 0;
});
   console.log(c);

but the script return [object Object] what I did wrong?

Upvotes: 1

Views: 45

Answers (2)

kshksdrt
kshksdrt

Reputation: 639

Reduce method takes two arguments - a function and the current total (generally you start with 0).

let total = matrix.reduce((x, element) => {
    return x += (element.home > 0 && element.away < element.home) ? element.value : 0;
}, 0);

console.log(total);

Quick tip: Use better naming for easier debugging.

Upvotes: 1

Shubham Dixit
Shubham Dixit

Reputation: 1

You need to initialize acc ,with 0 .Also there were some logical mistake that I have corrected changed acc to curr.Have a look

let matrix = [{
    home: 0,
    away: 0,
    value: 3.3406433795989217
  },
  {
    home: 0,
    away: 1,
    value: 7.371215599659567
  },
  {
    home: 0,
    away: 2,
    value: 8.216563231723296
  },
  {
    home: 0,
    away: 3,
    value: 6.168310325432516
  },
  {
    home: 0,
    away: 4,
    value: 3.5073431380070055
  },
  {
    home: 0,
    away: 5,
    value: 1.6104197237111348
  },
  {
    home: 0,
    away: 6,
    value: 0.6215879547521032
  },
  {
    home: 1,
    away: 0,
    value: 3.6824984689062354
  },
  {
    home: 1,
    away: 1,
    value: 8.276413244141352
  },
  {
    home: 1,
    away: 2,
    value: 9.393263752817953
  },
  {
    home: 1,
    away: 3,
    value: 7.174679043260096
  },
  {
    home: 1,
    away: 4,
    value: 4.146565482578415
  },
  {
    home: 1,
    away: 5,
    value: 1.9328356809373288
  },
  {
    home: 1,
    away: 6,
    value: 0.7563380262857585
  },
  {
    home: 2,
    away: 0,
    value: 2.097379162309316
  },
  {
    home: 2,
    away: 1,
    value: 4.796821176334703
  },
  {
    home: 2,
    away: 2,
    value: 5.534669783150271
  },
  {
    home: 2,
    away: 3,
    value: 4.2926916030788105
  },
  {
    home: 2,
    away: 4,
    value: 2.515879239794918
  },
  {
    home: 2,
    away: 5,
    value: 1.187567428237771
  },
  {
    home: 2,
    away: 6,
    value: 0.4699201039387404
  },
  {
    home: 3,
    away: 0,
    value: 0.8211845706155819
  },
  {
    home: 3,
    away: 1,
    value: 1.9075353125788463
  },
  {
    home: 3,
    away: 2,
    value: 2.2325407930142736
  },
  {
    home: 3,
    away: 3,
    value: 1.7539581905097126
  },
  {
    home: 3,
    away: 4,
    value: 1.0397854130494248
  },
  {
    home: 3,
    away: 5,
    value: 0.49576148435142064
  },
  {
    home: 3,
    away: 6,
    value: 0.19789157500581256
  },
  {
    home: 4,
    away: 0,
    value: 0.24773516000500195
  },
  {
    home: 4,
    away: 1,
    value: 0.5830691164647543
  },
  {
    home: 4,
    away: 2,
    value: 0.6904477295864787
  },
  {
    home: 4,
    away: 3,
    value: 0.5480588412313669
  },
  {
    home: 4,
    away: 4,
    value: 0.3278306643240631
  },
  {
    home: 4,
    away: 5,
    value: 0.15752158873111574
  },
  {
    home: 4,
    away: 6,
    value: 0.06329504444770173
  },
  {
    home: 5,
    away: 0,
    value: 0.061151126935764334
  },
  {
    home: 5,
    away: 1,
    value: 0.14545542986663187
  },
  {
    home: 5,
    away: 2,
    value: 0.17383966843362755
  },
  {
    home: 5,
    away: 3,
    value: 0.13909400923467197
  },
  {
    home: 5,
    away: 4,
    value: 0.08377178524032308
  },
  {
    home: 5,
    away: 5,
    value: 0.040486670771772315
  },
  {
    home: 5,
    away: 6,
    value: 0.016348423714773092
  },
  {
    home: 6,
    away: 0,
    value: 0.012806909587366471
  },
  {
    home: 6,
    away: 1,
    value: 0.030713983064227724
  },
  {
    home: 6,
    away: 2,
    value: 0.0369671174487187
  },
  {
    home: 6,
    away: 3,
    value: 0.029756524980091948
  },
  {
    home: 6,
    away: 4,
    value: 0.018012700795413502
  },
  {
    home: 6,
    away: 5,
    value: 0.008742842144856435
  },
  {
    home: 6,
    away: 6,
    value: 0.00354304640928744
  }
];

let c = matrix.reduce((acc, curr) => {
  return acc += (curr.home > 0 && curr.away < curr.home) ? curr.value : 0;
}, 0);
console.log(c);

Upvotes: 2

Related Questions