-1

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

我尝试过的类似于下面的内容,但是这种方法的问题是它会循环所有元素。正如您所看到的,在第一次迭代中我们可以理解 of 的计数product_id1因此它需要跳过任何其他相同的元素product_id. 我有一堆元素,我不喜欢循环所有元素。

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

  //CHECK THE COUNT AND SAVE IT TO SOME ARRAY

});

更新 :

可以投反对票,但是如果您对该投反对票发表评论,那将非常有帮助。我特别提到without了循环,因为我虽然有时可能使用 jQuery 强大的 CSS 选择器。

4

2 回答 2

3

您可以使用对象作为键 -> 计数对来累积值,尽管如果不循环元素就无法完成,无论是使用显式循环还是使用辅助函数,例如.each

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

然后,您必须再次循环以遍历计数值。

虽然您可以使用 jQuery 选择器来计算所有匹配相同值的元素,但实际上它的效率远低于仅遍历每个元素。此处提供的代码是 O(n),但是找到每个新唯一值然后计算它出现的次数的替代算法大约是 O(n^2)

于 2013-03-26T19:07:12.427 回答
0

使用您要计算的值获取所有输入的长度。

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

这只有在我们知道值的情况下才有效

于 2013-03-26T19:03:16.420 回答