Введение
В этом практическом занятии мы изучим, как инвертировать пары ключ-значение объекта, не изменяя исходный объект. Для инвертирования объекта мы будем использовать метод Object.keys() и Array.prototype.reduce(). Кроме того, мы узнаем, как применить функцию к инвертированным ключам и вернуть массив ключей, которые отвечают за получение инвертированного значения.
Функция для инвертирования объекта
Для инвертирования пар ключ-значение объекта без изменения исходного объекта используйте функцию invertKeyValues.
Вызовите функцию, введя
invertKeyValues(obj, fn)в Терминале/SSH, гдеobj- это объект, который нужно инвертировать, аfn- необязательная функция, которая будет применена к инвертированному ключу.Методы
Object.keys()иArray.prototype.reduce()используются для создания нового объекта с инвертированными парами ключ-значение, и если функция предоставлена, она применяется к каждому инвертированному ключу.Если
fnопущена, функция возвращает только инвертированные ключи, не применяя к ним никакой функции.Функция возвращает объект, в котором каждое инвертированное значение является массивом ключей, которые отвечают за получение инвертированного значения.
const invertKeyValues = (obj, fn) =>
Object.keys(obj).reduce((acc, key) => {
const val = fn ? fn(obj[key]) : obj[key];
acc[val] = acc[val] || [];
acc[val].push(key);
return acc;
}, {});
Пример использования:
invertKeyValues({ a: 1, b: 2, c: 1 }); // { 1: [ 'a', 'c' ], 2: [ 'b' ] }
invertKeyValues({ a: 1, b: 2, c: 1 }, (value) => "group" + value);
// { group1: [ 'a', 'c' ], group2: [ 'b' ] }
Резюме
Поздравляем! Вы завершили практическое занятие по инвертированию объекта. Вы можете выполнить больше практических заданий в LabEx, чтобы улучшить свои навыки.