jQuery:按值计算数组元素

时间:2011-04-11 01:17:44

标签: jquery arrays

我有一个由以下组成的元素数组:

timeArray = [];
$('.time_select').each(function(i, selected) {
  timeArray[i] = $(selected).val();
});

其中.time_select是一组不同HTML选择标记的类。

我想要做的是计算timeArray中特定值出现的次数。奇怪的是,我还没有找到任何简洁的解决方案......当然有一种简单的方法可以做到这一点吗?

4 个答案:

答案 0 :(得分:11)

我应该尝试使用(未充分利用的)$.each()函数将其抽象为函数。

function countElement(item,array) {
    var count = 0;
    $.each(array, function(i,v) { if (v === item) count++; });
    return count;
}

然后你可以像这样使用它:

var a = ['foo','bar','foo'];
var b = countElement('foo',a); // should return 2

答案 1 :(得分:5)

timeArray = [];
occurs = {};
$('.time_select').each(function(i, selected) {
  timeArray[i] = $(selected).val();
  if (occurs[timeArray[i]] != null ) { occurs[timeArray[i]]++; }
  else {occurs[timeArray[i]] = 1; }
});

答案 2 :(得分:1)

JS没有很多用于处理数组的内置函数。这很简洁:

var count = 0;
for (var i = 0; i < timeArray.length; i++) {
    count += (timeArray[i] == targetValue);
}

如果您愿意承担额外库的开销,那么underscore.js会提供许多方便的实用程序功能。使用underscore.js,上面的代码可以简化为:

_(timeArray).reduce(function(m, num) {return m + (num == targetValue);}, 0);

答案 3 :(得分:0)

您需要分组。见jQuery Table Plugin with Group By