在 ES6 中,给定一个 Map,如何访问顺序不重要的值对?
如果这是数组,我会这样做:
let arr = ["a", "b", "c", "d"];
for (let i=0; i < arr.length; i++)
for (let j=i+1; j<arr.length; j++)
console.log(`${arr[i]},${arr[j]}`);
对于 Google map ,我一直在努力寻找一种方法来以高效而优雅的方式完成类似的事情。迭代器看起来可以解决问题,但我假设它们的行为类似于 C++ 标准库迭代器,其中一个迭代器可以克隆为独立的迭代器。
我想到的最好的是:
var map = new Map([[0, "a"],[1, "b"],[2, "c"],[3, "d"]]);
for (let key of map.keys()) {
let log_away = false;
for (let other_key of map.keys()) {
if (log_away)
console.log(`${map.get(key)},${map.get(other_key)}`);
else
log_away = (key === other_key);
}
这相当简洁,但必须访问所有对,无论它们是否会被使用,效率都非常低。更糟糕的是,如果要尝试将其适应包含大型对象的 Set,最后键的比较必须是值的比较,这可能会非常昂贵。
最佳答案
您可以调用 values()
方法,然后对结果调用 Array.from()
以获得所有值的数组。然后您就可以像处理数组一样执行此操作。
const map = new Map([[0, "a"],[1, "b"],[2, "c"],[3, "d"]])
const values = Array.from(map.values())
for (let i = 0; i < values.length; i++)
for (let j = i + 1; j < values.length; j++)
console.log(`${values[i]},${values[j]}`)
关于javascript - ES6 Map 中的所有对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064146/