【问题标题】:How to Get Unique Elements from a DOM Collection in Vanilla JavaScript ES6+ [closed]如何在 Vanilla JavaScript ES6+ 中从 DOM 集合中获取唯一元素 [关闭]
【发布时间】:2019-02-09 19:26:25
【问题描述】:

我有一个 JavaScript 函数,它返回一个节点或元素数组,但它包含重复项。我四处搜索并找到了获取数组唯一项的函数,但它似乎只适用于字符串或简单类型,当将其应用于 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) 的示例屏幕截图。我想让它们匹配。

更新 2

想通了。 Set 解决方案有效,但我将它应用到错误的数组,所以我没有看到我期望的结果。现在我将它应用于正确的数组,它可以工作,想象一下...... :)

【问题讨论】:

  • 您能否发布一些示例代码,以便我们查看重复项是什么样的?我不知道 HTMLCollection 或 NodeList 会检索重复值
  • @Gup3rSuR4c 在哪个基础上重复?
  • 我更新了我的问题,以展示我的意思/想要的更多内容。

标签: javascript ecmascript-6


【解决方案1】:

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

您可能希望删除结构重复项,(例如,一堆 <br> 元素或诸如此类的东西)这比较棘手,您必须自己决定它们是否相等的标准。像Lodash's uniqBy 这样的东西。 (检查它的来源,看看它是如何工作的!)

【讨论】:

  • 你是对的,这些解决方案确实有效,特别是 Set 选项。结果是我将 Set 应用到了错误的数组,这导致了我的困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 2012-03-25
  • 2019-03-12
  • 2010-12-18
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多