#javascript #node.js #arrays #merge
Вопрос:
Давайте рассмотрим пример.
const arr1 = [ { algo: [ { key: 'c', value: 1 }, { key: 'java', value: 2 }, ], base: [ { key: 'js', value: 3 }, { key: 'python', value: 4 }, ], }, { algo: [ { key: 'c', value: 10 }, { key: 'java', value: 20 }, ], base: [ { key: 'js', value: 30 }, { key: 'python', value: 40 }, ], }, ]
Мне нужно объединить эти 2 массива объектов и создать следующий массив:
Информация: Я хочу объединить значение в массиве строковых/int значений информация: Я могу использовать lodash
const results = [ { algo: [ { key: 'c', value: [1, 10] }, { key: 'java', value: [2, 20] }, ], base: [ { key: 'js', value: [3, 30] }, { key: 'python', value: [4, 40] }, ], }, ]
Комментарии:
1. Пожалуйста, добавьте сюда также свое решение или то, что вы пытались получить, чтобы получить желаемый результат.
2. Я уже пробовал функции _.merge и reduce
Ответ №1:
Решение
const customMerge = (objValue, srcValue) =gt; { return { key: objValue.key, value: [objValue.value, srcValue.value] } } const mergeAttributes = array =gt; { return array.reduce((acc, curr) =gt; { if (Object.keys(acc).length === 0) { acc = curr } else { Object.keys(curr).forEach(key =gt; acc[key] = _.mergeWith(acc[key],curr[key],customMerge) ) } return acc }, {}) }