2012-03-30 2 views
0

я получаю ответ JSON как это:Как сопоставить массив и сохранить комбинированную категорию?

[ 
{"IndexID":1,"IndexName":"Consumer Confidence Index(CCI)","IndexValue":34.79,"Month":10,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":1,"IndexName":"Consumer Confidence Index(CCI)","IndexValue":34.25,"Month":11,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":1,"IndexName":"Consumer Confidence Index(CCI)","IndexValue":33.58,"Month":12,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":1,"IndexName":"Consumer Confidence Index(CCI)","IndexValue":32.64,"Month":1,"PercentageChanged":0,"Position":0,"Year":2012}, 
{"IndexID":1,"IndexName":"Consumer Confidence Index(CCI)","IndexValue":36.92,"Month":2,"PercentageChanged":0,"Position":0,"Year":2012}, 

{"IndexID":2,"IndexName":"Current Sentiment Index","IndexValue":47.42,"Month":10,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":2,"IndexName":"Current Sentiment Index","IndexValue":47.55,"Month":11,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":2,"IndexName":"Current Sentiment Index","IndexValue":47.01,"Month":12,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":2,"IndexName":"Current Sentiment Index","IndexValue":45.01,"Month":1,"PercentageChanged":0,"Position":0,"Year":2012}, 
{"IndexID":2,"IndexName":"Current Sentiment Index","IndexValue":47.32,"Month":2,"PercentageChanged":0,"Position":0,"Year":2012}, 

{"IndexID":3,"IndexName":"Future Expectations Sentiment Index","IndexValue":29.63,"Month":10,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":3,"IndexName":"Future Expectations Sentiment Index","IndexValue":28.81,"Month":11,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":3,"IndexName":"Future Expectations Sentiment Index","IndexValue":28.09,"Month":12,"PercentageChanged":0,"Position":0,"Year":2011}, 
{"IndexID":3,"IndexName":"Future Expectations Sentiment Index","IndexValue":27.59,"Month":1,"PercentageChanged":0,"Position":0,"Year":2012}, 
{"IndexID":3,"IndexName":"Future Expectations Sentiment Index","IndexValue":32.67,"Month":2,"PercentageChanged":0,"Position":0,"Year":2012} 

] 

, используя каждый, как я могу сделать и хранить данные как это:

var allData = [[for index id1],[for index id1],[for index id1]],[[for index id2],for index id2,],[[for indexid3],[for indexid3],[for indexid3]]]; 

важно: я не знаю, каким образом может значения индекса находятся в данных, что мне нужно, чтобы создать всю тщательную динамику.

нравится так? это поможет нарисовать диаграмму в соответствии с категорией с разными значениями .. любой простой способ добиться этого?

+0

'for index id1' - массив объектов? –

+0

Да, это только массив объектов. – 3gwebtrain

ответ

1

Лучшее, что я могу вспомнить, используя два для петель

// first pass, extract all data and categorize it 
var categories = []; 

for(var i = 0; i < items.length; i++) { 
    if(typeof categories[items[i].IndexID] == 'undefined') categories[items[i].IndexID] = []; 
    categories[items[i].IndexID].push(items[i]); 
} 


// second pass, separate out each indexes to its own array in a big array 
var results = []; 

$(categories).each(function(i, n) { 
    results.push(n); 
}); 
+0

где вы получаете itmes.length? – 3gwebtrain

+0

@ 3gwebtrain это стандартное свойство любого объекта массива javascript, имеющего –

0

Вы могли бы сократить его до одного объекта шпонки на IndexID:

function keyOnId(prev, curr) { 
    if(!(curr.IndexID in prev)) 
     prev[curr.IndexID] = []; 

    prev[curr.IndexID].push(curr); 

    return prev; 
} 

var dataObject = data.reduce(keyOnId, {}); 

Теперь вы должны иметь объект dataObject ищу что-то вроде :

{ 
    '1': [ {IndexID: 1, ...}, {IndexID: 1, ...}, ... ], 
    '2': [ {IndexID: 2, ...}, {IndexID: 2, ...}, ... ], 
    ... 
} 

Теперь это простой вопрос извлечения Винг этих массивов:

function arrayOfValues(obj) { 
    return Object.keys(obj).map(function(key) { 
    return obj[key]; 
    }); 
} 

var allData = arrayOfValues(dataObject); 

Edit: Альтернативное решение - это будет работать только в том случае, если IndexID s является числовым.

Снизить массив разреженный массив (будет иметь неопределенные значения для несуществующего IndexID с, если они не находятся в последовательности):

function sparseArray(prev, curr) { 
    if(!prev[curr.IndexID]) 
     prev[curr.IndexID] = []; 

    prev[curr.IndexID].push(curr); 

    return prev; 
} 

var sparse = data.reduce(sparseArray, []); 

Теперь filter только truthy значения:

var allData = sparse.filter(function(val) { return val }); 

Update:

Fiddle of first approach

Fiddle of second approach

Предостережение: Следует отметить, что Object.keys, reduce, map и filter являются частями ECMAScript 5, и не доступны в IE, поэтому придется использовать es5 shim для старых браузеров.

+0

. Можете ли вы подробно рассказать о том, как действовать в обоих направлениях? как я могу передать все мои массивы для работы – 3gwebtrain

+0

Вот что делает 'сокращение'. См. [Сокращение] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/Reduce). –

+0

вы можете использовать http://jsfiddle.net/, чтобы объяснить далее, я люблю вашу концепцию на основе объекта, но я не могу догнать! .. извините! – 3gwebtrain

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