简体   繁体   English

如何找到唯一的数据属性数

[英]How to find unique number of data-attribute

I have the following markup: 我有以下标记:

<ul class="category-item-container">
    <li class="category-item" data-group="bottoms">Jeans</li>
    <li class="category-item" data-group="tops">Shirt</li>
    <li class="category-item" data-group="tops">Hoodie</li>
    <li class="category-item" data-group="bottoms">shorts</li>
    <li class="category-item" data-group="accesories">Hat</li>
    <li class="category-item" data-group="accesories">Hanger</li>
    <li class="category-item" data-group="bottoms">Boxer</li>
    <li class="category-item" data-group="accesories">Tørklæde</li>
    <li class="category-item" data-group="accesories">Solbriller</li>
    <li class="category-item" data-group="bottoms">Bukser</li>
    <li class="category-item" data-group="tops">T-shirt</li>
</ul>

I would like to find the unique number of data-group data-attributes. 我想找到data-group数据属性的唯一数目。 In this case the number would be 3. I was thinking to turn the list into an array and then loop over the data-group , but I am not sure how that could be done, and if it is the correct way to do it. 在这种情况下,数字将为3。我当时正在考虑将列表转换为数组,然后在data-group循环,但是我不确定该怎么做以及它是否是正确的方法。

Loop over the elements and add the values of data-group to a set. 循环遍历元素,并将data-group的值添加到集合中。 At the end, check the size of the set. 最后,检查集合的大小。

 var set = new Set(); document.querySelectorAll('.category-item-container > .category-item').forEach(item => { set.add(item.getAttribute('data-group')); }); console.log(set.size); 
 <ul class="category-item-container"> <li class="category-item" data-group="bottoms">Jeans</li> <li class="category-item" data-group="tops">Shirt</li> <li class="category-item" data-group="tops">Hoodie</li> <li class="category-item" data-group="bottoms">shorts</li> <li class="category-item" data-group="accesories">Hat</li> <li class="category-item" data-group="accesories">Hanger</li> <li class="category-item" data-group="bottoms">Boxer</li> <li class="category-item" data-group="accesories">Tørklæde</li> <li class="category-item" data-group="accesories">Solbriller</li> <li class="category-item" data-group="bottoms">Bukser</li> <li class="category-item" data-group="tops">T-shirt</li> </ul> 

Use Set , Array.from and document.querySelectorAll in one line of code 在一行代码中使用SetArray.fromdocument.querySelectorAll

 const result = new Set(Array.from(document.querySelectorAll('li[data-group]'), ({dataset:{group}}) => group)).size; console.log(`there are ${result} unique groups`); 
 <ul class="category-item-container"> <li class="category-item" data-group="bottoms">Jeans</li> <li class="category-item" data-group="tops">Shirt</li> <li class="category-item" data-group="tops">Hoodie</li> <li class="category-item" data-group="bottoms">shorts</li> <li class="category-item" data-group="accesories">Hat</li> <li class="category-item" data-group="accesories">Hanger</li> <li class="category-item" data-group="bottoms">Boxer</li> <li class="category-item" data-group="accesories">Tørklæde</li> <li class="category-item" data-group="accesories">Solbriller</li> <li class="category-item" data-group="bottoms">Bukser</li> <li class="category-item" data-group="tops">T-shirt</li> </ul> 

You could cycle every li and create an array of unique elements, eg : 您可以循环每个li并创建一个唯一元素数组, 例如

 var groups = []; document.querySelectorAll("ul.category-item-container li").forEach(v => { var group = v.getAttribute("data-group"); if (!groups.includes(group)) { groups.push(group); } }); console.log(groups.length); 
 <ul class="category-item-container"> <li class="category-item" data-group="bottoms">Jeans</li> <li class="category-item" data-group="tops">Shirt</li> <li class="category-item" data-group="tops">Hoodie</li> <li class="category-item" data-group="bottoms">shorts</li> <li class="category-item" data-group="accesories">Hat</li> <li class="category-item" data-group="accesories">Hanger</li> <li class="category-item" data-group="bottoms">Boxer</li> <li class="category-item" data-group="accesories">Tørklæde</li> <li class="category-item" data-group="accesories">Solbriller</li> <li class="category-item" data-group="bottoms">Bukser</li> <li class="category-item" data-group="tops">T-shirt</li> </ul> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM