javascript - 获取Map.prototype.forEach()中的索引

eag*_*gor 4 javascript dictionary ecmascript-6

Map.prototype.forEach用两个参数进行回调:值和键.是否有可能得到每个条目的索引,类似于Array.prototype.forEach((value, index) => {})

T.J*_*der 12

Map.prototype.forEach 用两个参数进行回调:值和键.

不,它是三个参数调用的,就像Array#forEach.第三是地图.

是否有可能得到每个条目的索引,类似于 Array.prototype.forEach(functcion(value, index) => {})

(相当确定其中的functcion一部分并不意味着在那里.)

那是什么key.没有单独的"索引".

Map迭代次序是为各种迭代操作定义的,但是没有直接的迭代结构可以为您提供该顺序中条目的索引(而不是).订单是原始密钥插入顺序,例如:

const m = new Map();
m.set("x", 1);
m.set("q", 2);
m.set("z"), 3);
m.set("x", "one");
Run Code Online (Sandbox Code Playgroud)

如果我们遍历那个地图,我们会看到是关键的顺序按键加,所以"x","q","z".请注意,使用ke更改条目的值"x" 不会将其移动到最后.

Map#forEach(以及for-of使用map迭代器的任何其他内容)遵循迭代顺序,因此如果您根据该顺序考虑索引,则可以自己跟踪索引:

const m = new Map();
m.set("one", "uno");
m.set("two", "due");
m.set("three", "tre");
let index = 0;
m.forEach((value, key) => {
  console.log(index++, key, value);
});
Run Code Online (Sandbox Code Playgroud)

或者,您可以获取一个映射条目[key, value]数组(作为数组):

let entries = Array.from(m.entries());
Run Code Online (Sandbox Code Playgroud)

...并使用该数组的索引:

我只是不确定它买了什么.:-)