得到独特的元素计数jquery

时间:2013-03-26 19:01:14

标签: javascript jquery

我有以下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" />

如何获得countUnique元素(元素的唯一值)?

这可能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   选择器。

2 个答案:

答案 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;

这仅在我们知道值

时才有效