ちょっと調べるのに時間がかかったのでメモ。
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は使い始めたばかりだけど結構面白い書き方ができて良い。
でも可読性はちょっと下がる気もする。難しい。