2016-10-24 5 views
3

私はオブジェクトの配列を持っています。各オブジェクトにはidという固有のメンバがあります。 idの場合はマップのキーを作成するにはどうすればよいですか?一意のidプロパティを持つオブジェクトの配列をマップに変換する

+0

もう少し説明していただけますか?例の配列はありますか?そして、あなたが期待する出力は何ですか? – Keith

+0

以下の3つの回答のJSPrefsはここにあります:https://jsperf.com/array-to-map-4 – Ross

+0

かなりシンプルなはずです。あなたはそれを自分で試しましたか?あなたのコードを教えてください。何がうまくいかなかったのですか? – Bergi

答えて

3

Mapの必要な形式で新しい配列をマップできます。

var array = [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }, { id: 4, value: 'four' }, { id: 5, value: 'five' }], 
 
    map = new Map(array.map(a => [a.id, a])); 
 

 
console.log([...map]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

または反復処理し、あなたが[element.id, element]ペアに配列要素をマッピングするためにArray.prototype.map()を使用することができ、特定のキー

var array = [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }, { id: 4, value: 'four' }, { id: 5, value: 'five' }], 
 
    map = new Map(); 
 

 
array.forEach(a => map.set(a.id, a)); 
 
console.log([...map]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

ES6では、forEach()メソッドの代わりにfor..ofループを使用する方が良いでしょう。[ES6で[... for、for ...のどちらかを使用すると、array.forEach()を使用する理由はありますか? ://stackoverflow.com/q/31344516/3853934)。 'forEach()'もループよりも遅いです。 –

+0

しかし、私はループの出口を必要としません。ちょうど反復する。 –

+0

しかし、このコードを使用している人がループを終了するためにこのコードを変更する必要がないかどうかはわかりません。そしてそれはまだ遅いです。 –

3

に新しい項目を追加し、結果の配列をに渡しますコンストラクタ。

const arr = [{id: 1, a: true, b: false}, {id: 2, a: false, b: true}] 
 

 
const map = new Map(arr.map(element => [element.id, element])) 
 

 
// Check if map looks OK 
 
for (const [key, value] of map) { 
 
    console.log(key, value) 
 
}

5

あなたはマップにあなたの配列を減らしたい:ここ

const arr = [{id:1},{id:2},{id:2}]; 
 

 
const map = arr.reduce((acc, item) => acc.set(item.id, item), new Map()); 
 

 
console.log(map.get(1));

mapforEachを使用してに対してJSPrefです。

クロムv53 reduceが最も速い場合、forEachmapが最も遅いです。

+0

なぜこれがダウン投票を得たか知りたい。それは高速ではないかもしれない中間の配列を作っていません(後でガベージコレクタにバンプします) – Ross

+0

なぜ@複雑か?それは削減を使用しているため? – Ross

+0

私はコードを読んでいる人にとって、これはその意図をより深く理解していると言います。したがって簡単です。もちろん、あなたが「減らす」ことが分かっていない限り。 – Ross

関連する問題