小编Mar*_*ark的帖子

ES6地图中的所有对

在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]}`);
Run Code Online (Sandbox Code Playgroud)

有了地图,我很难找到一种方法,以高效和优雅的方式做类似的事情.迭代器看起来像他们会这样做,但我假设它们的行为类似于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);
}
Run Code Online (Sandbox Code Playgroud)

这是相当简洁的,但必须访问所有对,无论它们是否将被使用,都难以实现.更糟糕的是,如果要尝试将其调整为包含大型对象的Set,则最后的键的比较必须是值的比较,这可能非常昂贵.

javascript ecmascript-6

3
推荐指数
1
解决办法
515
查看次数

标签 统计

ecmascript-6 ×1

javascript ×1