-2

I want merge bellow arrays based on hour property and result should be a array of objects

 let sale = [
        {hour: '00', sale: 1514},
        {hour: '01', sale: 1038},
        {hour: '02', sale: 646},
        {hour: '03', sale: 344}
    ]
    let charge = [
        {hour: '00', charge: 1514},
        {hour: '01', charge: 1038},
        {hour: '02', charge: 646},
        {hour: '03', charge: 344}
    ]
    let errors = [
        {hour: '00', errors: 1514},
        {hour: '01', errors: 1038},
        {hour: '02', errors: 646},
        {hour: '03', errors: 344}
    ]

and convert to

  let all = [
        {hour: '01', sale: 1514, errors: 1038, charge: 646},
        {hour: '02', sale: 1514, errors: 646, charge: 646},
        {hour: '03', sale: 1514, errors: 344, charge: 646}
    ]
T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875
  • Please visit the [help], take the [tour] to see what and [ask]. Do some research - [search SO for answers](https://www.google.com/search?q=javascript+merge+object+array+on+property+site%3Astackoverflow.com). If you get stuck, post a [mcve] of your attempt, noting input and expected output using the [\[<>\]](https://meta.stackoverflow.com/questions/358992/ive-been-told-to-create-a-runnable-example-with-stack-snippets-how-do-i-do) snippet editor. – mplungjan Aug 29 '22 at 07:22
  • what happens to hour `'00'`? – Nina Scholz Aug 29 '22 at 07:24

2 Answers2

1

You could use an object for grouping the hours and get the values from the object as result.

const
    sale = [{ hour: '00', sale: 1514 }, { hour: '01', sale: 1038 }, { hour: '02', sale: 646 }, { hour: '03', sale: 344 }],
    charge = [{ hour: '00', charge: 1514 }, { hour: '01', charge: 1038 }, { hour: '02', charge: 646 }, { hour: '03', charge: 344 }],
    errors = [{ hour: '00', errors: 1514 }, { hour: '01', errors: 1038 }, { hour: '02', errors: 646 }, { hour: '03', errors: 344 }],
    result = Object.values([...sale, ...charge, ...errors].reduce((r, o) => {
        r[o.hour] = { ...r[o.hour], ...o };
        return r;
    }, {}));

console.log(result);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
-2

I decided share my experience - I solved it by the code below

let sale = [
  {hour: '00', sale: 1514},
  {hour: '01', sale: 1038},
  {hour: '02', sale: 646},
  {hour: '03', sale: 344}
];
let charge = [
  {hour: '00', charge: 1514},
  {hour: '01', charge: 1038},
  {hour: '02', charge: 646},
  {hour: '03', charge: 344}
];
let errors = [
  {hour: '00', errors: 1514},
  {hour: '01', errors: 1038},
  {hour: '02', errors: 646},
  {hour: '03', errors: 344}
];

let merge = [...sale, ...charge, ...errors]
let obj = []
for (let i = 0; i < 4; i++) {
  let obj2 = {}
  for (let x of merge) {
    if (parseInt(x.hour) === i) {
      Object.assign(obj2, x);
    }
  }
  if (obj2) obj.push(obj2)
}
console.log(obj)
mplungjan
  • 169,008
  • 28
  • 173
  • 236