Сопоставить ключи / значения объекта, возвращая новый объект, ala Array # map

В процессе миграции древней кодовой базы CoffeeScript на TypeScript я также попытка отказаться от lodash / underscore.js-alikes в пользу современных функций стандартной библиотеки JavaScript (или их прокладок).

Одна вещь, которую я часто использую в моей кодовой базе, — это map() над Object вместо того Array. В lodash это это.

Ниже приводится общая версия, которую я мог бы сделать:

export type Entry<T> = [string, T]
export type EntriesMapper<T, U> = (
   entry: Entry<T>,
   index: number,
   object: Record<string, T>,
) => Entry<U>

// FIXME: Support `Symbol`-keyed objects. Unfortunately, TypeScript themselves seem to have
//        sidestepped this issue; so I'm not sure what I can do, myself:
//           <https://git.io/JuGVg>
export function ObjectMap<T, U>(
   object: Record<string, T>,
   mapper: EntriesMapper<T, U>,
): { [k: string]: U } {
   const entries = Object.entries(object)

   const result = entries.map((entry: Entry<T>, index: number) => {
      return mapper(entry, index, object)
   })

   const return_value = Object.fromEntries(result)

   return return_value
}

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *