来自JavaScript ES2015上的地图的第一项

Phi*_*ger 27 javascript dictionary ecmascript-6

Map喜欢这样的:

const m = new Map();
m.set('key1', {})
.
m.set('keyN' {})
Run Code Online (Sandbox Code Playgroud)

Map可以有1个或多个项目.我可以通过索引获取第一个项目,无论m.get('key1')是否有迭代器循环?

喜欢: m.get()[0]

the*_*eye 55

使用这个Map.prototype.entries功能

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

console.log(m.entries().next().value); // [ 'key1', {} ]
Run Code Online (Sandbox Code Playgroud)

如果你想得到第一把钥匙,那么Map.prototype.keys就像这样使用

console.log(m.keys().next().value); // key1
Run Code Online (Sandbox Code Playgroud)

同样,如果你想获得第一个值,那么你可以Map.prototype.values像这样使用

console.log(m.values().next().value); // {}
Run Code Online (Sandbox Code Playgroud)

我们必须调用next()返回值的原因是,所有这些函数都返回迭代器.在此处阅读有关迭代协议的更多信息.

  • 你改变OP使用的''keyN'`键的原因是什么? (2认同)

log*_*yth 11

对于您想知道的具体示例,解构将是完美的.

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

let [[, obj]] = m;
Run Code Online (Sandbox Code Playgroud)

例如

let [pair] = m;
let [key, obj] = pair;
Run Code Online (Sandbox Code Playgroud)

是一种去构造然后抓住价值的选择,但更简单的选择就是

let [obj] = m.values();
Run Code Online (Sandbox Code Playgroud)


小智 8

此外,这对Setand都是正确的Map:您可以将任何内容转换为Array,然后通过其索引获取任何元素。像这样的东西:

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

console.log(Array.from(m)[0]); // ['key1', {}]
Run Code Online (Sandbox Code Playgroud)

  • 这个版本太昂贵了,因为它从地图创建了一个新数组。 (3认同)

Zuh*_*aha 8

也可以使用 ES6 和下一个版本的扩展功能来完成。让我们声明一个新的 Map 变量,然后添加两个值。之后,我们将使用...将映射转换为数组,或者您可以使用Array.fromthen 来获取仅[0]在获取的数组上使用的第一个元素。

const m = new Map();
m.set('key1', 1);
m.set('key2', 2);

console.log([...m][0]);    // ['key1', 1] 
Run Code Online (Sandbox Code Playgroud)

或者快速通过对 javascript 数组使用 disstruct 功能,以便该[k, v]数组引用地图上的第一项。

const [[k, v]] = m;
console.log(k, v); // 'key1', 1
Run Code Online (Sandbox Code Playgroud)