Skip to content

Commit

Permalink
update 2024-03-06-object-from-entries
Browse files Browse the repository at this point in the history
  • Loading branch information
yuheiy committed Mar 6, 2024
1 parent f3f5b62 commit 15e1267
Showing 1 changed file with 5 additions and 17 deletions.
22 changes: 5 additions & 17 deletions src/content/blog/2024-03-06-object-from-entries.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,31 @@ title: Object.fromEntriesを活用してArray#reduceを代替する
pubDate: 2024-03-16T06:05:00.000+09:00
---

JavaScriptにおいて、ある配列をもとにして別のオブジェクトを作成する場合には[`Array#reduce`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)を使用することが多い。
JavaScriptにおいて、ある配列をもとにして別のオブジェクトを作成する場合、[`Array#reduce`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)を使用することが多い。

```javascript
import assert from 'node:assert';

const input = ['foo', 'bar', 'baz'];

const result = input.reduce((accumulator, currentValue) => {
accumulator[currentValue] = capitalize(currentValue);
return accumulator;
}, {});

function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}

assert.deepStrictEqual(result, { foo: 'Foo', bar: 'Bar', baz: 'Baz' });
```

しかし例のように、単にキーと値の組み合わせにマッピングするだけなら、あえて`Array#reduce`を使うまでもない。代わりに[`Object.fromEntries`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries)を使えば、記述するコードをもっとシンプルにできる。

```javascript
import assert from 'node:assert';

const input = ['foo', 'bar', 'baz'];

const result = Object.fromEntries(input.map((value) => [value, capitalize(value)]));

function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
const result = Object.fromEntries(input.map((element) => [element, capitalize(element)]));

assert.deepStrictEqual(result, { foo: 'Foo', bar: 'Bar', baz: 'Baz' });
```

まず配列を「キーと値のペアからなる配列」に変換してから、それを`Object.fromEntries`に渡すことでオブジェクト化できる。
まず配列を「キーと値のペアからなる配列」`[key, value][]`に変換してから、それを`Object.fromEntries`に渡すことでオブジェクト化できる。

`Object.fromEntries`[`Object.entries`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)の対になるメソッドであり、「キーと値のペアからなる配列」をオブジェクトに変換する。`Object.entries`はその逆に、オブジェクトを「キーと値のペアからなる配列」に変換する
`Object.fromEntries`[`Object.entries`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)の対になるメソッドである。`Object.entries`は、オブジェクトを「キーと値のペアからなる配列」に変換するものであるのに対して、`Object.fromEntries`はその逆に、「キーと値のペアからなる配列」をオブジェクトに変換する

ついでに、TypeScriptでは`Array#reduce`を使うと型の取り扱いがやや煩雑になるが、`Object.fromEntries()`を使った記述ではそのような問題が起こらない
ついでに、TypeScriptでは`Array#reduce`を使うと型の取り扱いがやや煩雑になるが、`Object.fromEntries()`を使うとそのような問題が起こらない

0 comments on commit 15e1267

Please sign in to comment.