微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

forEach 里面的 forEach 有条件吗?

如何解决forEach 里面的 forEach 有条件吗?

我有两个列表,我想检查列表 B 是否包含列表 A 中的项目,因此我创建了一个按钮来触发 forEach 以检查列表 B 的任何元素的 innerText 是否与列表 A 中的元素相似:

    let itemsFromA = document.querySelectorAll('.itemA')
    let listB = document.getElementById('listB')

    listB.childNodes.forEach(childNodes => {
        if (childNodes.innerText === itemsFromA.forEach(itemsFromA => itemsFromA.innerText)) {
            childNodes.style.display = 'none'
        }
    })
}

但是什么也没发生。我该如何解决这个问题?

谢谢?

解决方法

NodeList.forEach() 不返回任何内容(或总是返回 undefined)。使用 Array.from()itemsFromA 转换为数组,并使用 Array.some() 检查是否有任何项目具有相同的 innerText

let itemsFromA = document.querySelectorAll('.itemA')
let listB = document.getElementById('listB')

listB.childNodes.forEach(node => {
  if (Array.from(itemsFromA).some(itemsFromA => itemsFromA.innerText === node.innerTex)) {
    node.style.display = 'none'
  }
})
,

您可以使用 some 而不是 forEach(它不返回任何内容,因此您的代码无法正常工作..)。

some 将测试数组中是否至少有一个元素通过了提供的函数实现的测试。

let itemsFromA = document.querySelectorAll('.itemA')
let listB = document.getElementById('listB')

new_list = listB.childNodes.map((index,childNodes) => {
    if (itemsFromA.some(item => item.innerText === childNodes.innerText)) {
        childNodes.style.display = 'none'
    }
})
,

这是因为 forEach 循环不返回值。 使用 map 而不是 forEach 来实现预期的行为。

例如:

if (childNodes.innerText === itemsFromA.map(itemsFromA => itemsFromA.innerText))
,

试试这个方法:

  let itemsFromA = document.querySelectorAll('.itemA')
  let listB = document.getElementById('listB')

  list = listB.childNodes.map((index,childNodes) => {
      itemsFromA.forEach(itemsFromA => {
        if (childNodes.innerText === itemsFromA.innerText)
           childNodes.style.display = 'none'
      })
    })
}
,

forEach 不返回任何值,它只会遍历数组。你应该改用 find 函数

`let itemsFromA = document.querySelectorAll('.itemA') 让 listB = document.getElementById('listB')

listB.childNodes.forEach(childNode => {
    if (itemsFromA.find(itemsFromA => itemsFromA.innerText == childNode.innerText)) {
        childNodes.style.display = 'none'
    }
})

}`

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。