2012-07-25 12 views
13

tengo una matriz como la siguiente,¿Cómo contar el número de apariciones de cada elemento en una matriz?

var arr = ['ab','pq','mn','ab','mn','ab'] 

Resultado esperado

arr['ab'] = 3 
arr['pq'] = 1 
arr['mn'] = 2 

probado como sigue,

$.each(arr, function (index, value) { 
    if (value) 
     arr[value] = (resultSummary[value]) ? arr[value] + 1 : 1; 
}); 

console.log(arr.join(',')); 
+2

No existe una "matriz jQuery". –

+1

http://stackoverflow.com/questions/5615916/jquery-count-array-elements-by-value – timmalos

+3

Pregunta muy oscurecida – user907860

Respuesta

36

hay necesidad de usar jQuery para esta tarea — este ejemplo va a construir una objeto con la cantidad de oclusiones de cada elemento diferente en la matriz

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 

Example fiddle


También es posible usar Array.reduce para obtener el mismo resultado y evitar una 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 

Example fiddle

+0

+1 por agregar un violín para demostrar su respuesta. ¿Por qué los downvotes? – starbeamrainbowlabs

+2

También puede usar una buena taquigrafía, como 'obj [arr [i]] = (obj [arr [i]] || 0) + 1'. Su solución funciona siempre que no se preocupe por los tipos de datos, pero si desea distinguir entre '' 2 '' y '2', también debe codificar esa información (solo decir). –

+0

buen punto para la taquigrafía :) – fcalderan

1
var result = {}; 
function count(input){ 
    var tmp = 0; 
    if(result.hasOwnProperty(input)){ 
    tmp = result[input]; 
    result[input]=tmp+1; 
    }else{ 
    result[input]=1; 
    } 
} 

función anterior le ayudará a contar el número de la misma cadena en una matriz.

0

¿Podría ser esto lo que estás tratando de hacer?

$.each(arr, function(index, value) { 
    if (!resultSummary[value]){ 
     resultSummary[value] = 0; 
    } 
    resultSummary[value] += 1; 
}); 

este código va a contar las apariciones de cada cadena de la matriz y almacenar los resultados en resultsArray

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 

Demostración: http://jsfiddle.net/dmx4y/2/

1

si usted no quiere una solución que requiere una biblioteca, y no tienen que apoyar legado javascript:

var report = {}; 

arr.forEach(function(el){ 
    report[el] = report[el] + 1 || 1; 
}); 

O si lo desea para hacerlo usando jQuery:

var report = {}; 

$.each(arr,function(i,el){ 
    report[el] = report[el] + 1 || 1; 
}); 

Esto usa short-circuit logic para probar condiciones y establecer valores. Creo que es una forma bastante concisa y legible de hacer javascript.

console.log(report); 
5

Creo que esta es la forma más sencilla forma de contar las apariciones con mismo valor en la matriz.

var a = [true, false, false, false]; 
a.filter(function(value){ 
    return value === false; 
}).length          
0
var arr = ['ab','pq','mn','ab','mn','ab']; 
var result = { }; 
    for(i=0;i<arr.length;++i) 
    { 
     if(!result[arr[i]]) 
      result[arr[i]]=0; 
     ++result[arr[i]]; 
    } 

for (var i in result){ 
console.log(i+":"+result[i]); 
} 
1

Trate $.grep

Ejemplo:

var arr = ['ab','pq','mn','ab','mn','ab'] 

jQuery.grep(arr, function(a){ 
    return a == 'ab' 
}).length // 3 

si apoyo ie8 no es necesario.

['ab','pq','mn','ab','mn','ab'].filter(function(value){ 
    return value == 'ab' 
}).length // 3 
Cuestiones relacionadas