参照してください使用してNILS'の答えをObject.entries
、および/またはbergiの答えはジェネレータ関数を使用して。けれどもはObject.entries
スペックではありませんでした、まだ質問が尋ねられたとき、それはステージ4にあった(ただ)2016年4月中にも背中にポリフィル及び使用するので、安全な、。(ここのステージの詳細。)そして、ジェネレーター関数はES2015にありました。OPは特に仲介者を回避するように求め、ジェネレーターはそれを完全には回避しませんが、以下または(わずかに)より優れた働きをしますObject.enties
。
FWIW、使用Object.entries
:
[name, value]
渡す配列の配列を作成しますnew Map
Map
コンストラクタは、イテレータを取得するには、アレイ上の関数を呼び出します。配列は配列インターレーターオブジェクトを作成して返します。
Map
イテレータオブジェクトはエントリ(取得することをコンストラクタ用途[name, value]
配列)とマップを構築
ジェネレーターの使用:
- ジェネレータ関数を呼び出した結果としてジェネレータオブジェクトを作成します
Map
コンストラクタはそれからイテレータを取得することジェネレータオブジェクトに関数を呼び出します。ジェネレータオブジェクトはそれ自体を返します
Map
コンストラクタは、エントリ(取得する(イテレータなど)ジェネレータオブジェクトを使用する[name, value]
配列)とマップを構築します
したがって、仲介者が1つ少なくなります(からの配列Object.entries
)。
ただし、使用する方Object.entries
が簡単で、その配列の作成は99.999%の時間の問題ではありません。だから本当に、どちらか。しかし、どちらも以下よりも優れています。:-)
元の答え:
を初期化するMap
には、配列の配列など、キーと値のペアを配列として返す任意のイテレータを使用できます。
const map = new Map([
['foo', 'bar']
]);
オブジェクトからマップへの組み込みの変換はありませんが、次のように簡単に実行できますObject.keys
。
const map = new Map();
let obj = {foo: 'bar'};
Object.keys(obj).forEach(key => {
map.set(key, obj[key]);
});
もちろん、それを処理するワーカー関数を自分に与えることもできます。
function buildMap(obj) {
let map = new Map();
Object.keys(obj).forEach(key => {
map.set(key, obj[key]);
});
return map;
}
その後
const map = buildMap({foo: 'bar'});
または、これはよりl33tに見えるバージョンです(それはまだですか?)バージョン:
function buildMap(obj) {
return Object.keys(obj).reduce((map, key) => map.set(key, obj[key]), new Map());
}
(はい、Map#set
マップ参照を返します。これはの乱用だと主張する人もいreduce
ます。)
または、私たちは本当に覆い隠しに乗り越えることができます:
const buildMap = o => Object.keys(o).reduce((m, k) => m.set(k, o[k]), new Map());
いいえ、私はそれを実際に行うことはありません。:-)
Object.entries
実際、はより優れたアプローチでObject.keys
あり、bergiのジェネレーター関数アプローチは、Object.keys
またはよりも少し直接的ですObject.entries
。