Вы можете объединить массивы для формирования пар ключ / значение для Object.fromEntries
:
Object.fromEntries([['M', 'male'], ['F', 'female']]);
//=> {M: 'male', F: 'female'}
Однако Object.fromEntries
не обрабатывает коллизии:
Object.fromEntries([['M', 'male'], ['F', 'female'], ['F', 'fa-female']]);
//=> {M: 'male', F: 'fa-female'}
Как вы можете видеть предыдущее значение для F
только что было переопределено: /
Мы можем создать пользовательскую функцию fromEntries
, которая помещает значения в массивы:
const fromEntries =
pairs =>
pairs.reduce((obj, [k, v]) => ({
...obj,
[k]: k in obj
? [].concat(obj[k], v)
: [v]
}), {});
fromEntries([['M', 'male'], ['M', 'fa-male'], ['F', 'female'], ['F', 'fa-female']]);
//=> {M: ["male", "fa-male"], F: ["female", "fa-female"]}
Как тогда вы создаете пары ключ / значение?
Одно из возможных решений: zip
const zip = (x, y) => x.map((v, i) => [v, y[i]]);
zip(['F', 'M'], ['female', 'male']);
//=> [["F", "female"], ["M", "male"]]
Таким образом, чтобы получить все пары (и ваш конечный объект)
fromEntries([
...zip(['F', 'M'], ['female', 'male']),
...zip(['F', 'M'], ['fa-female', 'fa-male'])
]);