鉴于
var myMap = new Map()
myMap.set("alpha", "first")
myMap.set("beta", "second")
myMap.set("charlie", "third")
myMap.set("delta", "fourth")
myMap.set("echo", "fifth")
myMap.set("foxtrot", "sixth")
从给定的密钥开始...
myMap.get("charlie") //=> "third"
...我如何获得周围密钥的值?
// pseudo code
myMap.get("charlie").prev() //=> "second"
myMap.get("charlie").next() //=> "fourth"
理想情况下,我想在迭代myMap
时这样做:
var valuesICareAbout = [];
myMap.forEach(function(value, key, map) {
valuesICareAbout.push({
callSign: key,
callValue: value,
nextCallValue: map.get(key).next(), // pseudo code
prevCallValue: map.get(key).prev() // pseudo code
});
});
在我的实际用例中,Map的键是DOM节点,我需要兄弟姐妹来计算位置偏移。预计地图中第一个节点的prev
值将为null
,并且地图中最后一个节点的next
值将为null
。< / p>
那有道理吗?
答案 0 :(得分:1)
如何简单地将地图的键迭代为数组?
var keys = Array.from(map.keys());
keys.forEach(function(key, i, keys) {
var current = map.get(key);
var previous = map.get(keys[i-1]);
var next = map.get(keys[i+1]);
// ...
});
(显然必须考虑到这里的第一个和最后一个元素)
如果这仅适用于内部代码,您还可以考虑使用自己的forEach
实现来扩展现有的Map类,该实现将上一个和下一个值传递给回调。