8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScript(ES6)で二次元配列から連想配列への変換を行う

Last updated at Posted at 2019-11-21

ちょっと調べるのに時間がかかったのでメモ。

var array = [["foo", 1], ["bar", 2]];
var obj = new Object;

for (i = 0; array[i]; i++) {
  var k = array[i][0];
  var v = array[i][1];
  obj[k] = v;
}

console.log(obj);

こんな感じの古い処理をES6の記法を使って書き直すことがあった。


stackoverflowにも同じような質問があって、以下の回答が一番参考になった。
(他の回答も勉強になった)

19/11/25追記: コメントをもとに更新しました。@shiracamus さんありがとうございます。

const array = [["foo", 1], ["bar", 2]];
const obj = array.reduce((obj, [key, value]) => Object.assign(obj, {[key]: value}), {});

console.log(obj);
// => { foo: 1, bar: 2 }
古いコード
const array = [["foo", 1], ["bar", 2]];
const obj = array.reduce((obj, e) => {
  Object.assign(obj, {[e[0]]: e[1]});
  return obj;
}, {});

console.log(obj);
// => { foo: 1, bar: 2}

記事中ではスプレッド演算子を利用していて, Object.assignより簡潔に記述できる。

const obj = array.reduce((obj, [key, value]) => ({...obj, [key]: value}), {});

ただ, オブジェクトに対するスプレッド演算子は一部標準化されてないブラウザがあるみたいなので, 今回はObject.assignを利用した。


2019/11/25追記: @htsign さんありがとうございます。

もっと簡潔に記述できるObject.fromEntriesというものもある。
こちらもまだ標準化されていないようなので今回は見送り。

const obj = Object.fromEntries([["foo", 1], ["bar", 2]]);
console.log(obj);
// => { foo: 1, bar: 2 }

ES6は使い始めたばかりだけど結構面白い書き方ができて良い。
でも可読性はちょっと下がる気もする。難しい。

8
3
4

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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?