2013-03-26 52 views
-1

我有以下的HTML获得独特的元素计数的jQuery

<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" /> 

我怎样才能Uniquecount的元素(元素的独特价值)?

这是可能的without looping

预期结果:

UNIQUE ID COUNT 
----------------- 
    1   2 
    2   3 
    5   1 

我曾尝试是像下面,但这个 方法的问题是,它会循环中的所有elements.As你可以看到,在 第一次迭代我们可以了解product_id1的计数,所以它需要跳过其他元素product_id。我有 有一堆的元素,我不会循环所有的元素。

$(".product_id").each(function(){ 

    //CHECK THE COUNT AND SAVE IT TO SOME ARRAY 

}); 

更新:

它的好来downvote,但是如果你把评论 为下降投票将是非常有益的。我特别声明without循环,因为我 虽然有时它可能与jQuery的强大CSS 选择器。

+1

如果不循环通过“”元素至少一次.... – sweetamylase 2013-03-26 19:05:03

+1

@ ssilas777他们都没有相同的ID ... – Alnitak 2013-03-26 19:05:28

+0

我只注意到它并删除了我的评论 – ssilas777 2013-03-26 19:05:59

回答

3

可以累积使用对象的值作为重点 - >算对,但它不能在没有遍历的元素做了,是否有一个明确的循环或.each一个辅助功能,例如:您

var count = {}; 
$('.product_id').each(function() { 
    count[this.value] = count[this.value] + 1 || 1; 
}); 

会再有循环再次遍历计数值。

虽然你可能使用jQuery选择器来计算匹配相同值的所有元素,但它实际上会比仅迭代每个元素效率低得多。这里给出的代码是O(n),但是寻找每个新的唯一值并且然后统计它出现的次数的替代算法将近似为O(n^2)

+0

提问者明确表示,如果可以做*没有循环*。使用'.each()'是*循环* .... – sweetamylase 2013-03-26 19:09:06

+1

@sweetamylase它不能没有循环完成 – Alnitak 2013-03-26 19:09:33

+0

我认为他只是拉你的腿,问题是它可能没有循环,而不是如何做o_O虽然我确信提问的人确实想要如何去做。 – spullen 2013-03-26 19:11:01

0

抓住所有输入的长度与您想要计数的值。

$("input[value='1']").length;

这只能如果我们知道价值

+0

假设你事先不知道可能的值是什么... – Alnitak 2013-03-26 19:04:50

+0

在这里,问题是,我不能猜的价值。 – Red 2013-03-26 19:04:57

+0

啊,我以为我们知道价值 – 2013-03-26 19:05:19