Javascript 如何找到集合中数组的存在性?

Javascript 如何找到集合中数组的存在性?,javascript,set,Javascript,Set,既然Javascript中的set能够获取对象,包括数组,那么如何在一个集合中找到数组列表的存在性呢 我尝试了以下代码: var sello = new Set(); sello.add(["a","b"]) console.log(sello.has(["a","b"])) // outputs false 我想 sello.has([“a”,“b”]) 由于我在集合sello中添加了精确的数组,因此应该输出true。我是否遗漏了一些虚假的事实或任何逻辑错误 注: 我不希望只匹配字符“a”

既然Javascript中的set能够获取对象,包括数组,那么如何在一个集合中找到数组列表的存在性呢

我尝试了以下代码:

var sello = new Set();
sello.add(["a","b"])
console.log(sello.has(["a","b"])) // outputs false
我想

sello.has([“a”,“b”])

由于我在集合
sello
中添加了精确的数组,因此应该输出true。我是否遗漏了一些虚假的事实或任何逻辑错误

注:

  • 我不希望只匹配字符
    “a”
    和/或
    “b”
    ,我是 正在查找与整个阵列匹配的
    [“a”、“b”]

  • 我正在寻找匹配数组的方法。我只需要将内容设置为
    同样,元素不必具有相同的顺序


您尝试执行的操作不会起作用,因为在Javascript中,您无法比较这样的数组,即使它们具有相同的值。这是因为数组是引用类型,而不是值类型,对于引用类型,Javascript根据它们是否引用相同的对象(即内存中的相同位置)来确定它们是否相等。例如,只需尝试:

console.log(['a','b'] == ['a','b']); // false
尽管具有相同的值,但每个数组都是一个新引用,因此它们彼此不相等

相比之下,下面代码中的比较确实涉及在等式两侧引用相同对象的数组:

let a = ['a','b'];
console.log(a == a); // true
因此:

let sello = new Set();
sello.add(a);
console.log(sello.has(a)); // true
要解决这个问题,您需要创建一个函数,根据数组的值来比较数组。您可以首先检查数组的长度是否相同。如果不是,那么他们是不平等的。然后,您可以循环查看每个位置中的项目,并查看对于任何给定位置是否有不同的项目。如果是这样,他们就不平等了。否则,假设您处理的是原语值的平面数组(没有引用类型的嵌套对象),那么数组是相等的。以下是我在“isEqual”中所做的:

function isEqual(x,y) {
    if (x.length != y.length)
        return false;
    for (let i in x)
        if (x[i] != y[i])
            return false;
    return true;
}
如果您愿意,请进行测试:

console.log(isEqual(['a','b'],['a','b'])); // true
不幸的是,
Set.has()
不接受函数,因此我们不能将它与
isEqual
一起使用。但是你可以循环使用集合的值。如果目标是创建一个单行程序,那么我发现最好的方法就是将集合转换为数组,并使用
some
方法
some
接受一个计算每一行的函数,如果它为任何一行返回true,则结果为true,否则为false

console.log(
    [...sello].some(item => isEqual(item, ['a','b']))
); 
// true

在JavaScript中,数组是对象,没有两个独立的对象被认为是相等的

显示与标准对象相同的错误:

var set1 = new Set();
var obj1 = {'key1': 1};
set1.add(obj1);

set1.has(obj1);        // returns true
set1.has({'key1': 1}); // returns false because they are different object references

对对象(如数组)使用
.has
最简单的方法是获取对象的引用,如:

让sello=newset();
让myArray=[“a”,“b”];
sello.add(myArray);

console.log(sello.has(myArray));//输出真的
可能重复的@imjared比较了两组数据,我想在一组数据中找到一些东西。可以在集合中插入更多数组。我只是没有写出来。我不认为这是必要的。我添加了一个加粗的编辑,这一行帮助我理解并消除了我的困惑。我希望你不介意谢谢你@塞利森,继续,再试一次编辑,据我所知,他似乎没有通过。