我有一个如下数组,
var arr = ['ab','pq','mn','ab','mn','ab']
预期结果
arr['ab'] = 3
arr['pq'] = 1
arr['mn'] = 2
尝试如下,
$.each(arr, function (index, value) {
if (value)
arr[value] = (resultSummary[value]) ? arr[value] + 1 : 1;
});
console.log(arr.join(','));
答案 0 :(得分:44)
无需使用jQuery执行此任务 - 此示例将构建一个对象,其中包含O(n)
var occurrences = { };
for (var i = 0, j = arr.length; i < j; i++) {
occurrences[arr[i]] = (occurrences[arr[i]] || 0) + 1;
}
console.log(occurrences); // {ab: 3, pq: 1, mn: 2}
console.log(occurrences['mn']); // 2
您还可以使用Array.reduce获得相同的结果并避免使用for-loop
var occurrences = arr.reduce(function(obj, item) {
obj[item] = (obj[item] || 0) + 1;
return obj;
}, {});
console.log(occurrences); // {ab: 3, pq: 1, mn: 2}
console.log(occurrences['mn']); // 2
答案 1 :(得分:6)
我认为这是如何计算数组中具有相同值的事件的最简单方法。
var a = [true, false, false, false];
a.filter(function(value){
return value === false;
}).length
答案 2 :(得分:3)
如果您不需要需要库的解决方案,并且不必支持旧版javascript:
var report = {};
arr.forEach(function(el){
report[el] = report[el] + 1 || 1;
});
或者如果你想使用jQuery:
var report = {};
$.each(arr,function(i,el){
report[el] = report[el] + 1 || 1;
});
这使用short-circuit logic来测试条件和设置值。我认为这是一种非常简洁易读的javascript方式。
console.log( report );
答案 3 :(得分:2)
答案 4 :(得分:1)
var result = {};
function count(input){
var tmp = 0;
if(result.hasOwnProperty(input)){
tmp = result[input];
result[input]=tmp+1;
}else{
result[input]=1;
}
}
上面的函数将帮助您计算数组中相同字符串的数量。
答案 5 :(得分:1)
尝试$.grep
示例:强>
var arr = ['ab','pq','mn','ab','mn','ab']
jQuery.grep(arr, function(a){
return a == 'ab'
}).length // 3
如果不需要支持ie8。
['ab','pq','mn','ab','mn','ab'].filter(function(value){
return value == 'ab'
}).length // 3
答案 6 :(得分:0)
这可能是你想要做的吗?
$.each(arr, function(index, value) {
if (!resultSummary[value]){
resultSummary[value] = 0;
}
resultSummary[value] += 1;
});
此代码将计算数组中每个字符串的出现次数,并将结果存储在resultsArray
答案 7 :(得分:0)
var arr = ['ab','pq','mn','ab','mn','ab']
function getCount(arr,val)
{
var ob={};
var len=arr.length;
for(var k=0;k<len;k++)
{
if(ob.hasOwnProperty(arr[k]))
{
ob[arr[k]]++;
continue;
}
ob[arr[k]]=1;
}
return ob[val];
}
//run test
alert(getCount(arr,'ab'));//3
var arr = ['ab','pq','mn','ab','mn','ab']
function getCount(arr,val)
{
var ob={};
var len=arr.length;
for(var k=0;k<len;k++)
{
if(ob.hasOwnProperty(arr[k]))
{
ob[arr[k]]++;
continue;
}
ob[arr[k]]=1;
}
return ob[val];
}
//run test
alert(getCount(arr,'ab'));//3