-2

I need Grouping two arrays, case second array no have code then set ''(other questions and answers, do not show how to do it that way).

FIRST ARRAY:

[
  { code: "1", description: "one", activity: "5" },
  { code: "2", description: "two", activity: "30" },
  { code: "3", description: "tree", activity: "898499949" },
  { code: "4", description: "four", activity: "65465" },
  { code: "5", description: "five", activity: "123" },
  { code: "6", description: "six", activity: "111" },
]

SECOND ARRAY:

[
  { code: "1", value: 500 },
  { code: "1", value: 300 },
  { code: "2", value: 20 },
  { code: "3", value: 1950 },
  { code: "6", value: 69990 },
  { code: "6", value: 2330 },
  { code: "6", value: 6120 },
  { code: "6", value: 2 },
]

I need set value in first ARRAY, if code equal in first and second ARRAY, case second array no have code then set '':

[
  { code: "1", description: "one", activity: "5", value: 500 },
  { code: "2", description: "two", activity: "30", value: 20 },
  { code: "3", description: "tree", activity: "898499949", value: 1950 },
  { code: "4", description: "four", activity: "65465", value: "" },
  { code: "5", description: "five", activity: "123", value: "" },
  { code: "6", description: "six", activity: "111", value: "69990" },
]

Expected new result:

[
  { code: "1", description: "one", activity: "5", value: 500 },
  { code: "1", description: "one", activity: "5", value: 300},
  { code: "2", description: "two", activity: "30", value: 20 },
  { code: "3", description: "tree", activity: "898499949", value: 1950 },
  { code: "6", description: "six", activity: "111", value: "69990" },
  { code: "6", description: "six", activity: "111", value: "2330 " },
  { code: "6", description: "six", activity: "111", value: "6120 " },
  { code: "6", description: "six", activity: "111", value: "2" },
]
rufus05
  • 43
  • 1
  • 10
  • 4
    Does this answer your question? [JavaScript merging objects by id](https://stackoverflow.com/questions/19480008/javascript-merging-objects-by-id) – Sebastián Puchet Jul 09 '20 at 17:04
  • @SebastiánPuchet no, I need to insert an empty value in "value", in case there is no value in the second array. – rufus05 Jul 09 '20 at 17:06
  • 1
    Come on bro, you just have to modify the algorithm... `_.map(a1, function(item){ return _.extend(item, _.find(a2, { code: item.code }) || { value: '' }); });` – Sebastián Puchet Jul 09 '20 at 17:25

1 Answers1

1

You could take a Map for the second array and map the first array and spread the mapped object or a default value.

const 
    first = [{ code: '1', description: 'one', activity: '5' }, { code: '2', description: 'two', activity: '30' }, { code: '3', description: 'tree', activity: '898499949' }, { code: '4', description: 'four', activity: '65465' }, { code: '5', description: 'five', activity: '123' }, { code: '6', description: 'six', activity: '111' }],
    second = [{ code: '1', value: 500 }, { code: '2', value: 20 }, { code: '3', value: 1950 }, { code: '6', value: 69990 }],
    key = 'code',
    result = first.map(
        (m => o => ({ ...o, ...(m.get(o[key]) || { value: '' }) }))
        (new Map(second.map(o => [o[key], o])))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Second.

const 
    first = [{ code: "1", description: "one", activity: "5" }, { code: "2", description: "two", activity: "30" }, { code: "3", description: "tree", activity: "898499949" }, { code: "4", description: "four", activity: "65465" }, { code: "5", description: "five", activity: "123" }, { code: "6", description: "six", activity: "111" }],
     second = [{ code: "1", value: 500 }, { code: "1", value: 300 }, { code: "2", value: 20 }, { code: "3", value: 1950 }, { code: "6", value: 69990 }, { code: "6", value: 2330 }, { code: "6", value: 6120 }, { code: "6", value: 2 }],
    key = 'code',
    result = second.map(
        (m => o => ({ ...m.get(o[key]), ...o }))
        (new Map(first.map(o => [o[key], o])))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392