Самый простой способ - это, вероятно, использовать .map()
, а затем использовать Object.fromEntries()
в качестве функции отображения следующим образом:
const arr = [
[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
[['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]
];
const res = arr.map(Object.fromEntries);
console.log(res);
Однако, если вы действительно хотите использовать .reduce()
, тогда вы можете использовать .map()
и .reduce()
для создания своих объектов для вас :
const arr = [
[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
[['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]
];
const res = arr.map(
entries => entries.reduce((acc, [key, value]) => ({...acc, [key]: value}), {})
);
console.log(res);
Выше используется .reduce()
для перебора парных массивов [key, value]
во ваших внутренних массивах. Для каждой пары ключ-значение вы можете деструктурировать (([key, value]) =>
), чтобы извлечь key
и value
из массива. Затем вы можете вернуть объект, который будет использоваться в качестве следующего значения для эмулятора acc
. Возвращаемый вами объект является встроенным объектом из acc
(который изначально {}
) и текущей парой ключ-значение. Это делается с использованием синтаксиса распространения (...
) с именами вычисляемых свойств ({[key]: value}
).
Одним из последних подходов будет сопоставление каждый внутренний [key, value]
для объекта:
[
[ { "firstName": "Joe" }, { "lastName": "Blow" }, { "age": 42 }, { "role": "clerk" } ],
[ { "firstName": "Mary" }, { "lastName": "Jenkins" }, { "age": 36 }, { "role": "manager" } ]
]
Затем вы можете сопоставить этот массив с массивом объектов, используя Object.assign()
, причем каждый аргумент для Object.assign()
равен объекты из внутренних массивов. Это «объединит» каждый объект в массиве, чтобы сформировать один больший объект:
const arr = [
[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
[['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]
];
const res = arr.map(
entries => entries.map(([k, v]) => ({[k]: v}))
).map(arr => Object.assign(...arr));
console.log(res);