我有以下HTML
<input type="hidden" name="product_id" value = "1" class="product_id" />
<input type="hidden" name="product_id" value = "2" class="product_id" />
<input type="hidden" name="product_id" value = "5" class="product_id" />
<input type="hidden" name="product_id" value = "1" class="product_id" />
<input type="hidden" name="product_id" value = "2" class="product_id" />
<input type="hidden" name="product_id" value = "2" class="product_id" />
如何获得count
个Unique
元素(元素的唯一值)?
这可能without looping
吗?
预期结果:
UNIQUE ID COUNT
-----------------
1 2
2 3
5 1
我尝试的是下面的内容,但问题是这个 方法是它将循环所有元素。你可以看到它 在第一次迭代中,我们可以理解
product_id
1
的计数,因此需要跳过具有相同product_id
的任何其他元素。一世 有一堆元素,我不会喜欢循环所有元素。
$(".product_id").each( function(){
//CHECK THE COUNT AND SAVE IT TO SOME ARRAY
});
更新:
如果您发表评论,它可能会非常有用 对于那次投票。我特意说
without
循环,因为我 虽然有时可能会使用jQuery强大的CSS 选择器。
答案 0 :(得分:3)
您可以使用对象作为键来累积值 - &gt; count对,虽然无法在没有循环遍历元素的情况下完成,无论是使用显式循环还是辅助函数,例如.each
:
var count = {};
$('.product_id').each(function() {
count[this.value] = count[this.value] + 1 || 1;
});
然后,您必须再次循环 以迭代计算的值。
虽然可以使用jQuery选择器来计算匹配相同值的所有元素,但它实际上比仅迭代每个元素效率低得多。这里给出的代码是O(n),但是找到每个新唯一值然后计算它出现次数的替代算法将是大约O(n ^ 2)
答案 1 :(得分:0)
使用您想要计算的值抓取所有输入的长度。
$("input[value='1']").length;
这仅在我们知道值
时才有效