Некоторые функциональные языки имеют очень хорошие инструменты для работы со списками, например, Haskell zipWith. Он принимает два списка и применяет двумерную функцию к каждому набору элементов.
Однако в настоящее время мы можем легко реализовать ее с помощью функций стрелок JS (ES6):
const zipWith = f => xs => ys => xs.map((x, i) => f(x, ys[i]));
In Если вы не используете стрелки для синтаксиса функции: zipWith - это функция с тремя параметрами, функцией f и массивами xs и ys .
Затем используем map , встроенный метод Array. Он принимает функцию в качестве аргумента и применяет к ней каждый элемент xs . Отсюда вторая функция стрелки в аргументе map. Когда map получает двумерную функцию, она предоставляет индекс массива, соответствующий каждому элементу, в качестве второго аргумента, здесь i .
Мы предоставляем x элемент xs в качестве первого аргумента нашей предоставленной функции f . Второй аргумент - это соответствующий элемент другого массива ys[i]
.
. С помощью функции zipWith нам нужна другая функция для объединения этих объектов в вашем массиве. Здесь помогает метод Object.assign :
const mergerFun = (a, b) => Object.assign({}, a, b)
Теперь примените его к своим массивам:
const result = zipWith(mergerFun)(company_details)(scoreArr);
Вот все это во фрагменте, который вы можете запустить. Я обрезал ваши объекты, чтобы сделать фрагмент немного яснее.
const companyDetails = [
{
type: 'Carrier',
name: 'Auto',
},
{
type: 'Dealer',
name: 'Car',
},
];
const scoreArr = [
{
score: 'None'
},
{
score: 'Positive'
},
];
// zipWith :: ( a -> b -> c ) -> [a] -> [b] -> [c]
const zipWith = f => xs => ys => xs.map((x, i) => f(x, ys[i]));
// mergerFun :: a -> b -> c
const mergerFun = (a, b) => Object.assign({}, a, b);
// put it all together
const result = zipWith(mergerFun)(companyDetails)(scoreArr);
console.log(result);