如何从Vanilla JavaScript ES6 +中的DOM集合中获取唯一元素

时间:2019-02-09 19:26:25

标签: javascript ecmascript-6

我有一个JavaScript函数,该函数返回Node或Element的数组,但其中包含重复项。我四处搜索并找到了获取数组唯一项的函数,但它似乎仅适用于字符串或简单类型,将其应用于DOM数组时,它什么也没做。我认为这与物品是对象有关。

使用ES6的Set作为某些答案表明是行不通的。另一个建议是使用过滤器功能检查项目是否在数组中已经有索引。同样,它们都不适用于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 个答案:

答案 0 :(得分:-1)

这些解决方案确实有效。但是他们遵循参照相等的原则。

您可能正在寻找删除结构重复项(例如,一堆<br>元素之类的技巧),这一点比较棘手,您必须为它们的相等性确定一个标准你自己类似于here。 (检查其来源以了解其工作原理!)