Skip to content

Instantly share code, notes, and snippets.

@misebox
Created July 30, 2024 04:36
Show Gist options
  • Save misebox/e041cc22c15a2095861a75500ad7d2d9 to your computer and use it in GitHub Desktop.
Save misebox/e041cc22c15a2095861a75500ad7d2d9 to your computer and use it in GitHub Desktop.
オブジェクト変換コードの見た目の複雑さを少し減らす関数
type Mapper<K, V, NK, NV> = (entry: [K, V]) => [NK, NV];
function mapEntries<K extends string, V, NK extends string, NV>(
obj: Record<K, V>,
mapper: Mapper<K, V, NK, NV>
): Record<NK, NV> {
return Object.fromEntries(
Object.entries(obj).map(mapper)
) as Record<NK, NV>;
}
@misebox
Copy link
Author

misebox commented Jul 30, 2024

// Object.fromEntries(Object.entries(INPUT_OBJECT).map(MAPPER_FUNCTION))
// --> mapEntries(INPUT_OBJECT, MAPPER_FUNCTION)

  const a = {a: 100, b: 200}
  const b = mapEntries(a, ([k, v]) => ([k + 'x', v * 2]))
  console.log(a)
  console.log(b)

$ tsx a.ts
{ a: 100, b: 200 }
{ ax: 200, bx: 400 }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment