¿Cómo contar la matriz a partir del valor del objeto JSON específico?

aquí está mi javascript:

var json = '{"GetReportIdResult":[{"bulan":"4","total":"1728","type":"CHEESE1K","uang":"8796383"},{"bulan":"4","total":"572476","type":"ESL","uang":"5863408410"},{"bulan":"4","total":"33507","type":"WHP","uang":"235653242"},{"bulan":"5","total":"4761","type":"CHEESE1K","uang":"134877865"},{"bulan":"5","total":"245867","type":"UHT","uang":"1446787280"},{"bulan":"5","total":"47974","type":"WHP","uang":"631929807"},{"bulan":"6","total":"5762","type":"CHEESE1K","uang":"293393832"},{"bulan":"6","total":"236803","type":"UHT","uang":"2219506085"},{"bulan":"6","total":"24853","type":"WHP","uang":"386175022"}]}';
obj = JSON.parse(json);
var arrayobj = obj.GetReportIdResult.length;
alert (arrayobj);

quiero contar cuantos type en el mismo bulan valor, (por ejemplo, hay 3 type = CHEESE1K, UHT y ESL in bulan 4 =)

¿como hacer eso?

preguntado el 04 de julio de 12 a las 05:07

Tus json variable en realidad no contiene JSON (que sería una cadena), se le asigna una referencia a un objeto, por lo que no necesita usar JSON.parse(json). -

@nnnnnn ops, mi culpa... jaja me olvidé de eso :p gracias por recordarme -

¡Hay un elemento de matriz en blanco en estos datos! -

@SomethVictory lo siento, error tipográfico: p gracias por avisarme -

3 Respuestas

Todavía hay un error tipográfico en su JSON: tiene dos comas seguidas entre los dos primeros "bulan":"6" objetos. Pero suponiendo que lo arregles...

Si está preguntando cómo contar tipos distintos para un determinado bulan value puedes hacer algo como esto:

function countTypesForBulan(resultArray, bulanVal) {
   var i,
       types,
       count = 0;
   for (i=0, types = {}; i < resultArray.length; i++)
      if (resultArray[i].bulan === bulanVal && !types[resultArray[i].type]) {
         types[resultArray[i].type] = true;
         count++;
      }
   return count;
}

console.log( countTypesForBulan(obj.GetReportIdResult, "4") );  // logs 3

Lo anterior recorre la matriz en busca de un valor bulan particular, y cuando encuentra uno, verifica si ya ha visto el tipo asociado; si no, lo agrega a la types objeto e incrementa el contador.

Demostración: http://jsfiddle.net/pAWrT/

Respondido 04 Jul 12, 05:07

Lo intento y muestra un registro de errores que dice Uncaught ReferenceError: type is not defined - en blanco91

Lo siento, prueba mi versión actualizada. había puesto sin querer type donde quise decir resultArray[i].type. Corregido, como se puede ver en la demo. - nnnnnn

En primer lugar, coloque el JSON en una cadena, de lo contrario, su código de ejemplo no funcionará.

var json = '{"GetReportIdResult":[{"bulan":"4","total":"1728","type":"CHEESE1K","uang":"8796383"},{"bulan":"4","total":"572476","type":"ESL","uang":"5863408410"},{"bulan":"4","total":"33507","type":"WHP","uang":"235653242"},{"bulan":"5","total":"4761","type":"CHEESE1K","uang":"134877865"},{"bulan":"5","total":"245867","type":"UHT","uang":"1446787280"},{"bulan":"5","total":"47974","type":"WHP","uang":"631929807"},{"bulan":"6","total":"5762","type":"CHEESE1K","uang":"293393832"},,{"bulan":"6","total":"236803","type":"UHT","uang":"2219506085"},{"bulan":"6","total":"24853","type":"WHP","uang":"386175022"}]}';

Luego, iterar con for y contar en una variable o un hashmap.

Como GetReportIdResult es una matriz, puede:

for( var i : obj.GetReportIdResult ){
    obj.GetReportIdResult[i] ... // Use at will.

Respondido 04 Jul 12, 05:07

Parece que tienes algo de sintaxis de Java allí :) - Abdullah Jibaly

gracias por su respuesta :) pero todavía no entiendo cómo usarlo para obtener lo que quiero - en blanco91

Esto te dará una map objeto que contendrá el recuento de cada bulan valor. Por ejemplo, map['4'].count volverá 3.

var i, row, arr = obj.GetReportIdResult, map = {};
for (i = 0; i < arr.length; i++) {
    row = arr[i];
    map[row.bulan] = map[row.bulan] || {count: 0};
    if (map[row.bulan][row.type] === undefined) {
        map[row.bulan][row.type] = row.type;
        map[row.bulan]['count'] += 1;
    }
}
console.log (JSON.stringify(map));​

JSFiddle aquí.

Respondido 04 Jul 12, 05:07

bueno, el resultado no es como lo que quiero, pero este código me es muy útil, porque después de esto necesito mapear el objeto :D muchas gracias - en blanco91

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.