Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6映射中的所有对_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript ES6映射中的所有对

Javascript ES6映射中的所有对,javascript,ecmascript-6,Javascript,Ecmascript 6,在ES6中,给定一个映射,如何访问顺序不重要的成对值 如果这是数组,我将执行以下操作: 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]}`); 这相当简洁,但无论是否使用,都必须访问所有对,这很难有效。更糟糕的是,如果试图将其适应于包含大型对象的集合,

在ES6中,给定一个映射,如何访问顺序不重要的成对值

如果这是数组,我将执行以下操作:

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]}`);

这相当简洁,但无论是否使用,都必须访问所有对,这很难有效。更糟糕的是,如果试图将其适应于包含大型对象的集合,那么最后的键比较必须是值的比较,这可能非常昂贵。

您可以调用
values()
方法,然后对结果调用
Array.from()
,以获得所有值的数组。然后,您可以像处理数组一样执行此操作

const map=新映射([[0,“a”],[1,“b”],[2,“c”],[3,“d”])
const values=Array.from(map.values())
for(设i=0;iconsole.log(`${values[i]},${values[j]}`)
您可以结合使用
数组。从
映射.values()
一些
来创建此ES6解决方案:

var-map=newmap([[0,“a”],[1,“b”],[2,“c”],[3,“d”]);
Array.from(map.values()).forEach(([key1],i,a)=>
a、 some(([key2],j)=>i!==j?console.log(key2,key1):true)

);向混合中添加一个以上的循环选项(不是更好,只是一种替代方法):使用rest操作符始终循环剩余的条目

let map=new map([0,“a”],[1,“b”],[2,“c”],[3,“d”]);
设arr=[…map.values()],v;
而(arr.length>1){
[v,…arr]=arr;
arr.forEach(v2=>console.log([v,v2].join(','));

}
很酷。我接受Array.from()包含对底层值的引用,而不是副本,这使它成为一个相当有效的选择。否?@如果值是对象,则标记:是,您得到的是对该对象的引用,而不是副本。否则(即,如果值是原语),您将获得该值的副本,因为在JavaScript中,您不能引用原语值。不同之处在于我使用的是
map.keys()
而不是值。在过去的日子里,我是哈斯克尔的书呆子,因此功能式实现具有特殊的吸引力。。。不要在意解决方案的简洁实现。我将分支我的代码并尝试一下。如果它在for循环实现附近的任何地方执行,那么它可能就是我的方式。谢谢你鼓励我掸去大脑功能编码部分的灰尘。
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);
}