Javascript:设置数据结构:相交

标签 javascript set ecmascript-6

试图让两个数据集相交,但我做不到。例如,在我下面的代码中,相交 mySet 和 mySet2 应该产生“1”,因为它们在它们的集合中都有一个值“1”。

var mySet = new Set();
var mySet2=new Set();
mySet.add(1);
mySet.add(2);
mySet.add("HELLOOOOO");
mySet2.add("hi");
mySet2.add(1);


var a = Array(mySet, mySet2);
console.log(a);

mySet.forEach(function(value) {
    console.log(value);
});


mySet2.forEach(function(value) {
    console.log(value);
});

function intersection_destructive(a, b)
{
    var result = new Array();
    while( mySet.length > 0 && mySet2.length > 0 )
    {
        if      (mySet[0] < mySet2[0] ){ mySet.shift(); }
        else if (mySet[0] > mySet2[0] ){ mySet2.shift(); }
        else /* they're equal */
        {
            result.push(mySet.shift());
            mySet2.shift();
        }
    }

    return result;
}

第 1 组和第 2 组都有“1”,但我的函数 (intersection_destructive) 没有返回它。我不确定如何将它们相交,我搜索了 stackoverflow 并找到了 intersection_destructive 但它对我不起作用,我也尝试过:

array1.filter(function(n) {
    return array2.indexOf(n) != -1
});

根据这个:Simplest code for array intersection in javascript

但是当我尝试运行它时,filter 出现错误。

最佳答案

遗憾的是,您已经发现没有本地交集或联合操作。不过,找到交叉点并不十分复杂:

let a = new Set([1,2,3])
let b = new Set([1,2,4])
let intersect = new Set([...a].filter(i => b.has(i)));
console.log(...intersect)

关于Javascript:设置数据结构:相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930894/

相关文章:

javascript - Fabric 中的定制形状 - 如何绘制超出其尺寸的图形?

javascript - WordPress插件功能,只有一个可以用吗?

python - 相当于 python 的 set.pop() 用于 C++ 的无序集

javascript - 如何使用对象解构扩展运算符删除多个对象属性

reactjs - 主对象可能未定义时的双重解构

javascript - 使用 true 或 false 在 JSON 中存储复选框值

javascript - 在 JavaScript 中,有没有一种方法可以在不使用 toLocaleString 的情况下将日期转换为时区?

c++ - 集合上的输出迭代器 : assign and increment iterator

arrays - Swift 中数组、集合和字典的区别

javascript - 如何判断运行的是哪个版本的 javascript chrome 开发工具?