代码之家  ›  专栏  ›  技术社区  ›  Gup3rSuR4c

如何从普通JavaScriptES6+[关闭]中的DOM集合中获取唯一元素

  •  -3
  • Gup3rSuR4c  · 技术社区  · 6 年前

    我有一个javascript函数,它返回一个节点或元素数组,但它包含重复项。我四处搜索并找到了一些函数来获取数组的唯一项,但它似乎只适用于字符串或简单类型,当将其应用于DOM数组时,它什么也不做。我想这和物品是物体有关。

    按照一些答案的建议使用ES6的设置是行不通的。另一个建议使用筛选函数检查该项在数组中是否已有索引。同样,这两种方法都不适用于DOM对象。

    如果有人能指出我如何删除这些副本,我将不胜感激。事先谢谢!

    更新

    @Kroltan似乎理解我的意思,但对于其他人来说,这里有一个返回重复节点的函数:

    function (
        selector) {
        const children = Array.from(this.parent().children).filter((
            v) => v !== this);
    
        if (!selector) {
            return children;
        }
    
        return children.filter((
            v) => v.matches && v.matches(selector));
    }
    

    如果我要做这样的事 $("div") ,根据嵌套的不同,我会得到很多副本。我想收缩返回的节点数组,使其不具有类似于jquery实现的重复项。下面是我的版本(1)和jquery版本(2)的屏幕截图示例。我想让他们匹配。

    enter image description here

    更新2

    明白了。这个 Set 解决方案是可行的,但我将它应用到了错误的数组中,所以我没有看到我期望的结果。现在我把它应用到正确的数组中,它工作了,想象一下…:)

    1 回复  |  直到 6 年前
        1
  •  -1
  •   Kroltan    6 年前

    这些解决方案确实有效。但他们的工作原理是参照平等。

    您可能要删除结构副本 (例如一堆 <br> 元素或其他)这是更棘手的,你必须自己决定他们平等的标准。类似的东西 Lodash's uniqBy . (检查其来源以了解其工作方式!)