2012-06-06 4 views
0

У меня есть ответ в следующем формате после выполнения groupby в запросе solr. Я использую Solr версии 3.5Изменение имени ключей при создании массива

"grouped":{ 
    "channel_id":{ 
     "matches":48, 
     "ngroups":26, 
     "groups":[{ 
      "groupValue":"204", 
      "doclist":{"numFound":1,"start":0,"docs":[ 
       { 
       "channel_name":"ZeeTv", 
       "channel_num":4, 
       "title":"The Name", 
       "channel_id":"204" 
      }}, 
     { 
      "groupValue":"166", 
      "doclist":{"numFound":2,"start":0,"docs":[ 
       { 
       "channel_name":"Sony", 
       "channel_num":2, 
       "title":"The Name", 
       "channel_id":"166", 
       { 
       "channel_name":"Sony", 
       "channel_num":2, 
       "title":"The Puzzle", 
       "channel_id":"166" 
      }}]}} 

Я принимаю ответ в массив следующим образом:

for(var chl in data.grouped.channel_id.groups) { 
    config['playlist'].push(data.grouped.channel_id.groups[chl]['doclist']['docs']); 
} 

Таким образом, индивидуальный массив каждого groupValue формируется. Struture из массива:

"0"=>{"0"=>"value"},"1"=>{"0"=>"result1","1"=>"result2"} 

Но я хочу, чтобы изменить кодовое имя, т.е. «0», «1» в groupValue от ответа при создании массива, так что я могу сделать config['playlist']['166'] проверить все для этого channel_id из массива. Это можно сделать, и если да, то как. Я ожидаю следующее:

"204"=>{"0"=>"value"},"166"=>{"0"=>"result1","1"=>"result2"} 

Кроме того, если это возможно может запрос Solr сделать так, чтобы channel_num в ответ приходит в порядке возрастания т.е. первый результат для channel_num 2, а затем 4. Я сделал groupby:channel_id

ответ

2

Как насчет этого?

for(var chl in data.grouped.channel_id.groups) { 
    config['playlist'][data.grouped.channel_id.groups[chl].groupValue] = data.grouped.channel_id.groups[chl]['doclist']['docs']; 
} 

Нажимаем туда, чтобы добавить элемент в конец массива. Но любой объект Javascript является только хеш-таблицей, поэтому вы можете использовать его таким образом.

Кстати, вы можете сделать код проще с for each:

for each(var chl in data.grouped.channel_id.groups) { 
    config['playlist'][ch1.groupValue] = ch1['doclist']['docs']; 
} 
+1

Ваш второй код недействителен javascript вне firefox. Кроме того, во всех циклах для каждого цикла отсутствует проверка 'hasOwnProperty'. –

+0

Спасибо, что первый кодовый блок работает для меня как ожидалось – user850234

+2

Вы не должны использовать 'for' ...' in' on массивы. Используйте 'len = data.grouped.channel_id.groups.length; для (var chl = 0; chl

2

Pikrass ответил правильно ... насколько заказе с channel_num касается попробуйте добавить следующее в вашем запросе:

&sort=channel_num asc 
+0

Невозможно принять два ответа одновременно, чтобы вы голосовали за вас. благодаря – user850234

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