LoginSignup
18
19

More than 5 years have passed since last update.

JavaScript(ES6)で辞書内包表記

Last updated at Posted at 2017-05-23

Pythonなら簡単にかける辞書内包表記をJavaScriptで実現したい

Pythonのリスト内包表記,辞書内包表記,便利ですよね.
冗長になりがちなfor文も

リスト内包表記

>>>  [i * 2 for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

辞書内包表記

>>> {i: i * 2 for i in range(10)}
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}

で一発です.

JavaScriptで実現しようとした場合,mapやfilterを使用してリスト内包表記を実現できることは知っていたのですが,辞書内包表記の書き方を知ることができたので,備忘録を残しておきます.

JavaScript(ES6)でリスト内包表記

辞書内包表記の前にリスト内包表記の確認をしておくと,上記の例では

[...Array(10).keys()].map((d) => {return d * 2});

で処理できますし,Pythonで

>>> [i * 2 for i in range(10) if i % 2 == 0]
[0, 4, 8, 12, 16]

のように,if文が入るようなものは,冗長にはなりますが,

[...Array(10).keys()].filter((d) => d % 2).map((d) => d * 2);

のように書くことができます.

JavaScript(ES6)で辞書内包表記

本命の辞書内包表記ですが,上記のPythonの例では

[...Array(10).keys()].reduce((obj, x) => Object.assign(obj, { [x]: x * 2 }), {})

のように書くことができます.一般化すると

array.reduce((obj, x) => Object.assign(obj, { [key_maker(x)]: value_maker(x) }), {})

となります.Pythonに比べるとだいぶ冗長ですが,それでもfor文を使うよりは簡潔に書ける機会が多いと思います.

参考

18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19