Создать функцию, используя _.flow()
. Функция объединяет массивы, _.groupBy()
клавишу (id
), а затем _.map()
группы и _.merge()
каждую группу:
const { flow, concat, groupBy, map, merge } = _;
const combineBy = key => flow(
concat,
arr => groupBy(arr, key),
groups => map(groups, g => merge({}, ...g))
)
const array1 = [{ id:1, colorCode:2},{id:2, colorCode:2}];
const array2 = [{ id:1, value:3},{id:2, value:4}];
const combineById = combineBy('id');
const result = combineById(array1, array2);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Та же идея еще проще с lodash / fp. Просто замените _.merge()
на _.mergeAll()
:
const { flow, concat, groupBy, map, mergeAll } = _;
const combineBy = key => flow(concat, groupBy(key), map(mergeAll))
const array1 = [{ id:1, colorCode:2},{id:2, colorCode:2}];
const array2 = [{ id:1, value:3},{id:2, value:4}];
const combineById = combineBy('id');
const result = combineById(array1, array2);
console.log(result);
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>