检查数组是否至少有一个条件,并且以后再检查不要覆盖它

丹尼

问题

for循环正在检查数组以查看其是否至少符合一个条件。此for循环中的后续迭代似乎覆盖了原始匹配项。

如何检查数组以查看其是否至少符合一个条件,并且此检查的后续迭代没有覆盖结果(因此变为false)?

目标

随附的代码段应呈现数组对应<article>元素在其对应数组中具有任何匹配项元素因为包含,这意味着澳大利亚和墨西哥元素应显示-因为它们两者都包含与currentItemTagsshowOnlyItemsWithTheseTagsshowOnlyItemsWithTheseTags["digital", "2016"]currentItemTagsshowOnlyItemsWithTheseTags

方法

以下代码旨在执行以下操作:

  1. 遍历每个元素pageItem(三个<article>元素)
  2. currentItemTags阵列准备阵列pageItem
  3. 遍历showOnlyItemsWithTheseTags数组
  4. 检查currentItemTagsshowOnlyItemsWithTheseTags
  5. 根据是否存在匹配项分别应用一个隐藏/显示CSS类

我怀疑步骤5出了问题。我尝试未成功应用.some().filter()方法-无法在这种情况下使这些方法起作用。

// Set up
const pageItems = document.querySelectorAll("main article");

// Changing items in this array should show or hide page items
const showOnlyItemsWithTheseTags = [
  "digital",
  "2016"
];

for (let i = 0; i < pageItems.length; i++) {
  // Access each item
  const currentItem = pageItems[i];

  // Manually deconstruct this item's dataset into one array
  const currentItemTags = [];
  currentItemTags.push(
    currentItem.getAttribute("data-type"),
    currentItem.getAttribute("data-year"),
    currentItem.getAttribute("data-topic"),
    currentItem.getAttribute("data-country")
  );


  // Where I think the problem is:

  // Check this item's dataset array if it contains a matche with showOnlyItemsWithTheseTags
  for (let j = 0; j < showOnlyItemsWithTheseTags.length; j++) {
    
    if (currentItemTags.includes(showOnlyItemsWithTheseTags[j])) {
      // currentItemTags array contains a match with showOnlyItemsWithTheseTags
      // Show this item
      currentItem.classList.remove("hideItem");
      currentItem.classList.add("showItem");
    } else {
      // currentItemTags does not contain ANY match with showOnlyItemsWithTheseTags
      // Hide this item
      currentItem.classList.remove("showItem");
      currentItem.classList.add("hideItem");
    }
  }
}
/* Set up */
body {
  margin: 1rem;
  font-family: sans-serif;
}

article {
  background-color: tomato;
  padding: 1rem;
  margin-bottom: 1rem;
  font-weight: 700;
  font-size: 1.5rem;
}

/* Classes references in JS */
.showItem {
  display: auto;
  /* back to default */
}

.hideItem {
  display: none;
}
<main>
  <article data-type="analog" data-year="2016" data-topic="food" data-country="australia">Analog, 2016, Food, Australia</article>
  <article data-type="digital" data-year="2017" data-topic="art" data-country="mexico">Digital, 2017, Art, Mexico</article>
  <article data-type="analog" data-year="2020" data-topic="music" data-country="poland">Analog, 2020, Music, Poland</article>
</main>

当前结果

<article>显示澳大利亚元素。墨西哥也应该展示。

乔乔先生

在JS中获取所有数据属性的最简单方法是 Object.values(element.dataset)

但是如果您还有其他无关紧要的数据属性,
listArray = [element.dataset.type, element.dataset.year, element.dataset.topic, element.dataset.country ]

验证2个数组是否具有一些公共元素的方法:
if (arr1.some(key=>arr2.includes(key)))

完整的代码:

const pageItems = [...document.querySelectorAll('main article')]
                    .map(el=>({el:el, keys:Object.values(el.dataset)}) );

function articleFiltering( showOnly )
  {
  pageItems.forEach(item=>
    {
    if (showOnly.some(key=>item.keys.includes(key))) 
      { item.el.classList.remove('hideItem') }
    else
      { item.el.classList.add('hideItem')    }
    }) 
  }

const showOnlyItemsWithTheseTags = [ 'digital', '2016' ]; 

articleFiltering( showOnlyItemsWithTheseTags )
body {
  margin: 1rem;
  font-family: sans-serif;
  }
article {
  background-color: tomato;
  padding: 1rem;
  margin-bottom: 1rem;
  font-weight: 700;
  font-size: 1.5rem;
  }
.hideItem {
  display: none;
  }
<main>
  <article data-type="analog"  data-year="2016" data-topic="food"  data-country="australia" > Analog, 2016, Food, Australia </article>
  <article data-type="digital" data-year="2017" data-topic="art"   data-country="mexico"    > Digital, 2017, Art, Mexico    </article>
  <article data-type="analog"  data-year="2020" data-topic="music" data-country="poland"    > Analog, 2020, Music, Poland   </article>
</main>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery检查两个数组是否至少有一个公共元素

来自分类Dev

使用 jQuery/Javascript 检查数组中是否至少有一个输入具有值

来自分类Dev

如何检查多维数组中是否至少有一个元素?(愚蠢的基本Javascript问题)

来自分类Dev

JavaScript - 检查是否至少有一个变量为真

来自分类Dev

如何检查一个字符串中是否至少有一个字符组成数组?(Java)

来自分类Dev

如何检查一个字符串中是否至少有一个字符组成数组?(Java)

来自分类Dev

PostgreSQL检查数组中至少有一项是否在字符串中

来自分类Dev

如何 - 编写一个程序来检查一个数是否至少有一个相等的相邻数

来自分类Dev

确定多维numpy数组中是否至少有一个零

来自分类Dev

检查三个procmail条件中是否至少有两个为真

来自分类Dev

是否需要检查正则表达式的匹配长度,以确定是否至少有一个匹配项?

来自分类Dev

返回一个共享一个值并且至少有一个与另一个条件匹配的行

来自分类Dev

如何知道两个数组是否至少有一个相等的元素(f#)

来自分类Dev

R:按组,检查一个变量的每个唯一值是否至少有一个观测值,其中该变量的值等于另一个变量的值

来自分类Dev

是否有任何逻辑可以找到连续至少有一个真

来自分类Dev

查找逻辑矩阵的每一行是否至少有一个TRUE

来自分类Dev

查找逻辑矩阵的每一行是否至少有一个TRUE

来自分类Dev

获取至少有一个元素符合某种条件的切片的索引

来自分类Dev

确定矩阵是否至少有一个零元素

来自分类Dev

如何找出哈希中是否至少有一个键

来自分类Dev

按组检查每个唯一值是否至少有一行,其中该字段的值等于另一个字段的值

来自分类Dev

用于密码模式检查的自定义验证器是什么,至少有一个大写、小写和数字

来自分类Dev

Python - 检查字符串中是否至少有 3 个数字

来自分类Dev

过滤对象数组,其中一个对象的数组与另一个数组至少有一个匹配项

来自分类Dev

如何查找 DTO 中是否至少有一个字段为空

来自分类Dev

从数组中选择随机元素的最佳方法,在 R 中至少有一个最小差异

来自分类Dev

如果python中的二维数组至少有一个True,如何返回True

来自分类Dev

TSQL - 在表中查找一列中有多个记录,并且在另一列中至少有一个特定的值出现

来自分类Dev

SQL:如何查找是否至少有一条记录符合条件

Related 相关文章

  1. 1

    jQuery检查两个数组是否至少有一个公共元素

  2. 2

    使用 jQuery/Javascript 检查数组中是否至少有一个输入具有值

  3. 3

    如何检查多维数组中是否至少有一个元素?(愚蠢的基本Javascript问题)

  4. 4

    JavaScript - 检查是否至少有一个变量为真

  5. 5

    如何检查一个字符串中是否至少有一个字符组成数组?(Java)

  6. 6

    如何检查一个字符串中是否至少有一个字符组成数组?(Java)

  7. 7

    PostgreSQL检查数组中至少有一项是否在字符串中

  8. 8

    如何 - 编写一个程序来检查一个数是否至少有一个相等的相邻数

  9. 9

    确定多维numpy数组中是否至少有一个零

  10. 10

    检查三个procmail条件中是否至少有两个为真

  11. 11

    是否需要检查正则表达式的匹配长度,以确定是否至少有一个匹配项?

  12. 12

    返回一个共享一个值并且至少有一个与另一个条件匹配的行

  13. 13

    如何知道两个数组是否至少有一个相等的元素(f#)

  14. 14

    R:按组,检查一个变量的每个唯一值是否至少有一个观测值,其中该变量的值等于另一个变量的值

  15. 15

    是否有任何逻辑可以找到连续至少有一个真

  16. 16

    查找逻辑矩阵的每一行是否至少有一个TRUE

  17. 17

    查找逻辑矩阵的每一行是否至少有一个TRUE

  18. 18

    获取至少有一个元素符合某种条件的切片的索引

  19. 19

    确定矩阵是否至少有一个零元素

  20. 20

    如何找出哈希中是否至少有一个键

  21. 21

    按组检查每个唯一值是否至少有一行,其中该字段的值等于另一个字段的值

  22. 22

    用于密码模式检查的自定义验证器是什么,至少有一个大写、小写和数字

  23. 23

    Python - 检查字符串中是否至少有 3 个数字

  24. 24

    过滤对象数组,其中一个对象的数组与另一个数组至少有一个匹配项

  25. 25

    如何查找 DTO 中是否至少有一个字段为空

  26. 26

    从数组中选择随机元素的最佳方法,在 R 中至少有一个最小差异

  27. 27

    如果python中的二维数组至少有一个True,如何返回True

  28. 28

    TSQL - 在表中查找一列中有多个记录,并且在另一列中至少有一个特定的值出现

  29. 29

    SQL:如何查找是否至少有一条记录符合条件

热门标签

归档