1

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?

1
  • Do you want the accumulator to be the sum? You're treating it like it's an object. Also, pass an initial value for the accumulator as the second argument to reduce. Commented May 12, 2020 at 16:26

2 Answers 2

2

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);

Sign up to request clarification or add additional context in comments.

2 Comments

Also, you changed acc to curr some place: you might want to note that.
yes, now have the correct value! Thanks for your help!
1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.