2012-07-04 2 views
0

вот мой JavaScript:Как подсчитать массив из определенного значения объекта JSON?

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); 

Я хочу, чтобы рассчитывать на то же bulan значения, сколько type, (например, есть 3 type = CHEESE1K, UHT и ESL в bulan = 4)

как сделать это?

+0

Ваша переменная 'json' на самом деле не содержит JSON (которая была бы строкой), ей назначается ссылка на объект, поэтому вам не нужно использовать' JSON.parse (json) '. – nnnnnn

+0

@nnnnnn ops, моя ошибка..haha Я забыл об этом: p Спасибо, что напомнил мне – blankon91

+0

В этих данных есть пустой элемент массива! –

ответ

2

Там еще опечатка в вашем JSON: у вас есть две запятые подряд между двумя первыми "bulan":"6" объектами. Но если вы исправить это ...

Если вы спрашиваете, как считать различные типы для конкретного bulan значения, которое вы можете сделать что-то вроде этого:

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 

Вышеприведенных петель через массив перспективные для конкретное значение bulan, и когда он находит его, он проверяет, видел ли он уже связанный тип - если нет, он добавляет его к объекту types и увеличивает счетчик.

Демо: http://jsfiddle.net/pAWrT/

+0

Я пробовал и он показывает журнал ошибок, который говорит 'Uncaught ReferenceError: type not defined' – blankon91

+0

Извините, попробуйте обновленную версию. Я случайно поставил 'type', где я имел в виду' resultArray [i] .type'. Исправлено, как вы можете видеть в демо. – nnnnnn

+0

сейчас он работает :)) спасибо – blankon91

1

Прежде всего, поставьте JSON в строку, иначе ваш пример кода не будет работать.

var json = '{"GetReportIdResult": [{"bulan": "4", "total": "1728", "type": "CHEESE1K", "uang": "8796383"}, {" Bulan ":" 4" , "всего": "572476", "тип": "ESL", "Uang": "5863408410"}, { "Булан": "4", "всего": "33507",» Тип ":" WHP», "Uang": "235653242"}, { "Булан": "5", "всего": "4761", "тип": "CHEESE1K", "Uang": "134877865"}, { "Булан": "5", "всего": "245867", "тип": "УВТ", "Uang": "1446787280"}, { "Булан": "5", "всего": "47974" , "тип": "WHP", "Uang": "631929807"}, { "Булан": "6", "всего": "5762", "тип": "CHEESE1K", "Uang": "293393832" } ,, { "Булан": "6", "всего": "236803", "тип": "УВТ", "Uang": "2219506085"}, { "Булан": "6", "всего": "24853", "тип": "WHP", "Uang": "386175022"}]} ';

Затем Итерация с for и подсчет в переменной или хэш-карте.

Поскольку GetReportIdResult является массивом, вы можете:

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

Похоже, у вас там синтаксис Java :) –

+0

спасибо за ваш ответ :), но я до сих пор не понимаю, как использовать его, чтобы получить то, что я хочу – blankon91

1

Это даст вам map объект, который будет содержать счетчик для каждого bulan значения. Например, map['4'].count вернется 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 here.

+1

ну, результат не такой, какой я хочу, но этот код очень полезен для меня, потому что после этого мне нужно нанести на карту объект: D большое спасибо – blankon91

Смежные вопросы