2012-04-06 5 views
0

У меня есть json as, и я пытаюсь сгруппировать его. Я пытаюсь сделать это с помощью javascript. В идеале я хотел бы объединить JSON и просто присвоить номер каждой группе, чтобы я мог ее пропустить. Моя конечная цель - иметь функцию, чтобы я мог выбирать, к какому ключу нужно группировать.как я могу группировать данные json вместе с javascript

Я попытался использовать функцию, но не имел успеха. Я не уверен, куда идти отсюда.

var groupBy = function(array, predicate) { 
    var grouped = {}; 
    for(var i = 0; i < array.length; i++) { 
     var groupKey = predicate(array[i]); 
     if (typeof(grouped[groupKey]) === "undefined") 
      grouped[groupKey] = []; 
     grouped[groupKey].push(array[i]); 
    } 

    return grouped; 
} 

var groupData = groupBy(data, function (obj) { 
    console.log(obj); 
    return obj.category; 
}); 

Мой JSON является

{ 
    "merchantcontract":"My Angel Dream Day Care Center 1 10137.01", 
    "smi_transactiondate":"\/Date(1332831600000)\/", 
    "smi_glamount2":5.8700, 
    "smi_transactionclass":180870001, 
    "smi_transactionclassname":"Residual Agent Commission", 
    "smi_contractprodcutidname":"Traditional", 
    "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5", 
    "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5" 
}, 

{ 
    "merchantcontract":"My Angel Dream Day Care Center 1 10137.01", 
    "smi_transactiondate":"\/Date(1331622000000)\/", 
    "smi_glamount2":4.5792, 
    "smi_transactionclass":180870001, 
    "smi_transactionclassname":"Residual Agent Commission", 
    "smi_contractprodcutidname":"Traditional", 
    "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5", 
    "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5" 
}, 

{ 
    "merchantcontract":"Eds Overhead Doors 10150.01", 
    "smi_transactiondate":"\/Date(1333695600000)\/", 
    "smi_glamount2":11.9300, 
    "smi_transactionclass":180870001, 
    "smi_transactionclassname":"Residual Agent Commission", 
    "smi_contractprodcutidname":"Traditional", 
    "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5", 
    "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5" 
}, 

Что мне нужно для все же коммерсанта контракт будет группой, и все остаточное быть сгруппирован в тех, так что я могу сложить glamount2

-My Angel Dream Day Care Center 1 10137.01 
--Residual //This could be anything 
----total of glamount2 in the residual of my angle 
--foo 
----total of glamount2 in the foo of my angle 
+2

Этот вызывает смущение. Какой результат вы получаете от своей существующей функции и что с ней не так? – Hemlock

+0

Я внес изменения в свой пост, чтобы лучше объяснить. – Tom

+1

@Tom: Вам действительно нужно «перегруппировать» ваш JSON, чтобы зациклиться на них и получить «glamount2»? Предполагая, что JSON содержится внутри массива, 'glamount2' должен быть уже доступен вам. –

ответ

0

Возможно, я что-то упустил (ваше намерение запутывает меня), но если вам просто нужно перебрать эти объекты и получить конкретное свойство, вам не нужно «перегруппировать» их каким-либо образом.

Просто перебирать объекты и получить все имущество вам нужно:

​for(var i=0; i < myjson.length; i++){ 
    console.log(myjson[i].smi_glamount2); 
}​ 

Это предполагает, что эти 3 (или более) объектов все содержащиеся в одном массиве, как это:

var myjson = [{ 
    "merchantcontract": "My Angel Dream Day Care Center 1 10137.01", 
    "smi_transactiondate": "\/Date(1332831600000)\/", 
    "smi_glamount2": 5.8700, 
    "smi_transactionclass": 180870001, 
    "smi_transactionclassname": "Residual Agent Commission", 
    "smi_contractprodcutidname": "Traditional", 
    "smi_agentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5", 
    "smi_primaryagentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5" 
}, 
{ 
    "merchantcontract": "My Angel Dream Day Care Center 1 10137.01", 
    "smi_transactiondate": "\/Date(1331622000000)\/", 
    "smi_glamount2": 4.5792, 
    "smi_transactionclass": 180870001, 
    "smi_transactionclassname": "Residual Agent Commission", 
    "smi_contractprodcutidname": "Traditional", 
    "smi_agentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5", 
    "smi_primaryagentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5" 
}, 
{ 
    "merchantcontract": "Eds Overhead Doors 10150.01", 
    "smi_transactiondate": "\/Date(1333695600000)\/", 
    "smi_glamount2": 11.9300, 
    "smi_transactionclass": 180870001, 
    "smi_transactionclassname": "Residual Agent Commission", 
    "smi_contractprodcutidname": "Traditional", 
    "smi_agentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5", 
    "smi_primaryagentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5" 
}]; 
+0

Ну, мне нужно иметь значение smi_glamount2 для каждого торговца. Итак, первые два будут добавлены вместе, а затем следующий будет сам по себе. – Tom

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