当前位置: 首页 > 知识库问答 >
问题:

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

狄高畅
2023-03-14

由于设置在Javascript是能够采取对象,包括数组,我如何找到一个数组列表中的集合的存在?

我尝试了以下代码:

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

我在假设

塞洛。有([“a”,“b”])

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

注:

>

  • 我不希望只匹配字符“a”和/或“b”,我希望匹配整个数组[“a”,“b”]

    我正在寻找匹配阵列的方法。我只需要内容相同,元素的顺序不必相同。


  • 共有2个答案

    翁昊乾
    2023-03-14

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

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

    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
    
    let sello = new Set();
    let myArray = ["a","b"];
    sello.add(myArray);
    
    console.log(sello.has(myArray)); // outputs true
    缑赤岩
    2023-03-14

    您试图做的事情不会起作用,因为在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
    

    为了解决这个问题,您需要创建一个函数,根据数组的值比较数组。您可以首先检查数组是否具有相同的长度。如果没有,那么它们就不相等。然后您可以遍历每个项目,看看是否有任何给定位置的不同。如果是,它们不相等。否则,假设您处理的是一个基元值的平面数组(没有引用类型的嵌套对象),那么数组是相等的。这是我在下面的“平等”中做的:

    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()不接受函数,所以我们不能将它与isEqu一起使用。但是您可以循环使用集合的值。如果目标是创建一行,我发现最好的方法是将集合转换为数组,并使用一些方法。一些接受一个计算每行的函数,如果它对任何行返回true,则结果为true,否则为false。

    console.log(
        [...sello].some(item => isEqual(item, ['a','b']))
    ); 
    // true
    
     类似资料:
    • 问题内容: 我需要获取数组的所有可能的子集,其中至少要包含2个项目,而最大未知数。有人可以帮助我一点吗? 说我有这个… …我怎么得到这个? 问题答案: 窃取此JavaScript组合生成器后,我添加了一个参数以提供最小长度,从而, 要使用,提供一个数组以及所需的最小子集长度, 输出是

    • 假设有几个数组: 我需要找出所有可能的元素集合(1,2,3,4,5...)中的每一个在至少两个阵列(A,B,C....)并以下列方式显示它们: 实际输入是包含字符串的文件。可能有数千个文件,每个文件可能包含一百多个密钥字符串。 我尝试了下面的方法:首先,我通过比较所有可能的数组对来生成元素集。然后,我试图通过使用逻辑生成其他集合——元素集合的交集在数组集合的并集中很常见。像这样: 从上面我们可以得

    • 这里是我尝试的代码,我成功地获得了所有集合的名称,但当我搜索特定的字段时,它不起作用,也没有给我任何错误。 该代码没有错误,也没有警告。

    • 我有一个集合,每个用户都有自己的文档。现在,我想创建一个子集合来存储与特定用户相关的更多数据。 到目前为止,我的代码如下所示: 如何将数据存储在子集合中? 编辑我创建了一个新的保存函数,但firestore创建了一个名为“uid”的新文档,而不是使用当前uid将数据存储在文档的子集合中。如何解决这个问题?

    • 我在MonoDB集合中有100k个文档,有20k个文档/记录。我想查找该特定文档使用的内存。 请帮助我在MongoDB控制台中查找内存大小(MB)。

    • 问题内容: 这里是问题:我有一个元组列表(也可以根据需要设置)。例如: 我想找到一个清单 因为一旦将所有集合放在一起,交集就不会为空。 举个例子 结果应该是 希望问题解决。那么,如果有的话,在python中最优雅的方法是什么? 干杯 问题答案: 这些是图形的 连接组件 ,可以使用诸如的图形库找到。对于第二个示例: