web-dev-qa-db-ja.com

JavaScript ES2015のマップの最初のアイテム

次のようなMapがあります。

_const m = new Map();
m.set('key1', {})
.
m.set('keyN' {})
_

Mapには1つ以上のアイテムを含めることができます。 m.get('key1')およびイテレータループなしで、インデックスによって最初のアイテムを取得できますか?

のような:m.get()[0]

25
Philip Loger

このように _Map.prototype.entries_ 関数を使用します

_const m = new Map();
m.set('key1', {})
m.set('keyN', {})

console.log(m.entries().next().value); // [ 'key1', {} ]
_

最初のキーを取得する場合は、次のように _Map.prototype.keys_ を使用します

_console.log(m.keys().next().value); // key1
_

同様に、最初の値を取得したい場合は、このように _Map.prototype.values_ を使用できます

_console.log(m.values().next().value); // {}
_

戻り値でnext()を呼び出さなければならない理由は、これらのすべての関数が iterators を返すためです。反復プロトコルの詳細を読む こちら

49
thefourtheye

あなたが疑問に思っている特定の例については、破壊は完璧でしょう。

let m = new Map();
m.set('key1', {});
m.set('key2', {});

let [[, obj]] = m;

例えば.

let [pair] = m;
let [key, obj] = pair;

解体してから値を取得する1つのオプションですが、より簡単なオプションは

let [obj] = m.values();
11
loganfsmyth

また、それはSetMapの両方に対して正しいです。つまり、何でもArrayに変換してから、そのインデックスで任意の要素を取得できます。このようなもの:

let m = new Map();
m.set('key1', {});
m.set('key2', {});

Array.from(m)[0];    // ['key1', {}]
1
KidThePug