javascript - 统计不同div中li元素个数的函数,当存在相同自定义值的div时合并计数

标签 javascript arrays

我有一个通过 JavaScript 编写的过滤器复选框列表。过滤器复选框来自具有可重复值的 div。

<div value="a" class="foo">
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
</div>
<div value="b" class="foo">
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
</div>
<div value="c" class="foo">
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
</div>
<div value="c" class="foo">
    <li>list item</li>
    <li>list item</li>
</div>

我有一个包含不同 div 值的数组。 (我在这里切入正题,只是显示数组的结果,而不是我如何创建它。)

var allDivs = ["a", "b", "c", "c", "d", "e", "e", "f"]

我有一个经过过滤的数组版本,因此没有重复项。我使用这个数组生成一组过滤器复选框。

var filteredDivs = ["a", "b", "c", "d", "e", "f"]

我想做的事: 每个 div 中都包含许多列表项。

在每个过滤器复选框(来自没有重复的过滤数组)旁边,我想提供 li 元素的计数,结合重复条目中的 li 元素的数量。

这里是每个 div 中 li 元素数量的表示。

  • a = 4
  • b = 5
  • c = 2
  • c = 7
  • d = 5
  • e = 2
  • e = 3
  • f = 6

...但是结合起来(因为我有两个“c”和“e”div),那就是:

  • a = 5
  • b = 5
  • c = 9
  • d = 5
  • e = 5
  • f = 6

我可以通过执行类似的操作来获得这些个人计数

$("a li").length
$("b li").length
$("c li").length

但我无法将其转化为函数。

更多上下文...过滤器复选框是这样编写的,只是为了给您一个想法。

var renderFilters = function (filteredDivs) {
    app.querySelector("#filters").innerHTML =
        filteredDivs.map(function (module, index) {
            var html =
                '<label class="filter">' +
                '<input type="checkbox" data-filter="' + filteredDivs[index] + '" checked>' +
                module + " (" + ")" // Would like the count of li items here.
            '</label>';
            return html;
        }).join('')
};

除了在唯一 div 值列表中写入作为过滤器复选框之外,我还想在括号中显示 li 项目的计数,并在适当的情况下将它们组合起来。

我不知道从哪里开始解决这个问题。我希望有人能为我指出正确的方向,以便我可以研究答案(如果有的话)。

最佳答案

你可以这样做:

var divs = document.querySelectorAll('[value]')
var values = Array.from(divs).map(d => d.getAttribute('value'));
var unique_values = Array.from(new Set(values));
var counts = unique_values.map(c => ({value: c, count: document.querySelectorAll('[value="' + c + '"] li').length}))
console.log(counts);
<div value="a" class="foo">
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
</div>
<div value="b" class="foo">
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
</div>
<div value="c" class="foo">
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
    <li>list item</li>
</div>
<div value="c" class="foo">
    <li>list item</li>
    <li>list item</li>
</div>

关于javascript - 统计不同div中li元素个数的函数,当存在相同自定义值的div时合并计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59179678/

相关文章:

javascript - 在 jQuery 中,当单选按钮都具有相同的名称时,如何获取它们的值?

javascript - 将 clojurescript 集成到 javascript 框架中

javascript - HTML:当条件不再成立时,如何使条件消息消失?

java - 将多维数组从 Mongodb 映射到 Java 应用程序

java - 按多列中的值对二维数组进行排序

javascript - ParseFloat 数组值

javascript - 在 Javascript 中以对象作为键值的数组

javascript - 通过 Vue.js 中的嵌套组件传递数据

javascript - 我需要每一帧重新绘制整个 Canvas 吗?

javascript - 按值而不是引用将数组传递到数组数组中