Группировка данных по определенному полю из json, затем создание элемента

#javascript #jquery #json

#javascript #jquery #json

Вопрос:

мой приведенный ниже код группирует данные и создает элементы. Однако отсутствует последняя группа. Я думаю, что мой цикл плохой.

 data:
        [
        {"GROUPID":"A","QTY":3,"STORE":"NYC"},
        {"GROUPID":"A","QTY":4,"STORE":"CT"},
        {"GROUPID":"B","QTY":2,"STORE":"NJ"},
        {"GROUPID":"B","QTY":5,"STORE":"NJ"},
        {"GROUPID":"C","QTY":1,"STORE":"MA"}
        ]
  

итак, моя группировка будет выглядеть так

A NYC-3 NJ-4
B MA-1 CT — 4
C NJ-5

пока что мой цикл создает группы A и B, но не создает группу C. .. из ajax

   success: function(msg) {
 var c = jQuery.parseJSON(msg.d);
 var myGroupid = c[0].GROUPID;
 var mList = "";
 var sum = "";

 for (var i = 0; i < c.length; i  ) {
   currentGroup = c[i].GROUPID;
   if ((currentGroup !== myGroupid) {
       //compare if current record's group id is different than previous record.
       //if so, then means a new group. Send to plugin. 


       //call groupPlugin(myGroupid,mList)

     }
     mList  = '<li'
     " data-group=" '   c[i].GROUPID   '" data-store="'   c[i].STORE  '"</li>'

    }
}
  

Комментарии:

1. Пожалуйста, сделайте отступ в своем коде правильно и единообразно. Это поможет вам и всем остальным диагностировать проблемы.

2. @MikeC, спасибо за совет. Я попытался немного очистить. Мой цикл повторяет каждую строку и в основном сравнивает текущий идентификатор группы с последним. Если отличается, создайте группу и добавьте строки. Однако не создается группа для последней строки.

Ответ №1:

Я надеюсь, что правильно понял ваш вопрос. Я бы поступил так:

 groups = []; 
for (var i = 0; i < c.length; i  ) {
    var groupID = c[i].GROUPID;
    if(groups[groupID]=="undefiend"){
       groups[groupID]=[];
    }
    groups[c[i].GROUPID].append(c[i]);
}
  

в конце у вас будет ассоциативный массив groups , содержащий все группы, проиндексированные по их groupID

затем, чтобы получить все элементы группы (т.Е. A)

 var group = groups["A"];
for (i=0;i<group.length;i  ){
    console.log(group[i].STORE;    
}
  

Комментарии:

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