Инвертирование пар ключ-значение объекта

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы изучим, как инвертировать пары ключ-значение объекта, не изменяя исходный объект. Для инвертирования объекта мы будем использовать метод 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, чтобы улучшить свои навыки.