2017-02-15 3 views
0

Я новичок в угловом и хочу перегруппировать JSON. Можно ли использовать метод angular.forEach()?JSON перегруппировка для каждого метода в AngularJs

[ 
    { 
     "doc":{ 
     "Title":"Main", 
     "name":"Ajith", 
     "Day":"03", 
     "count":3 
     } 
    }, 
    { 
     "doc":{ 
     "Title":"starters", 
     "name":"Saji", 
     "Day":"01", 
     "count":39 
     } 
    }, 
    { 
     "doc":{ 
     "Title":"desert", 
     "name":"Sajeeb", 
     "Day":"02", 
     "count":63 
     } 
    }, 
    { 
     "doc":{ 
     "Title":"Main", 
     "name":"Suith", 
     "Day":"03", 
     "count":3 
     } 
    }, 
    { 
     "doc":{ 
     "Title":"starters", 
     "name":"Manu", 
     "Day":"01", 
     "count":9 
     } 
    } 
] 

Я хочу, чтобы выход был следующим.

{ 
    "order":[ 
     { 
     "Day":"01", 
     "Title":"starters", 
     "items":[ 
      { 
       "name":"Saji", 
       "count":39 
      }, 
      { 
       "name":"Manu", 
       "count":9 
      } 
     ] 
     }, 
     { 
     "Day":"02", 
     "Title":"desert", 
     "items":[ 
      { 
       "name":"Sajeeb", 
       "count":63 
      } 
     ] 
     }, 
     { 
     "Day":"03", 
     "Title":"Main", 
     "items":[ 
      { 
       "name":"Ajith", 
       "count":3 
      }, 
      { 
       "name":"Suith", 
       "count":3 
      } 
     ] 
     } 
    ] 
} 

Чтобы перегруппировать с помощью метода angular.forEach(). Пожалуйста, помогите. Благодарю.

ответ

1

https://jsfiddle.net/9fwtm0a0/4/

var days = []; 
arr.forEach(function(d) { 
    var day = parseInt(d.doc.Day); 
    var item = { name: d.doc.name, count: d.doc.count }; 

    if (days[day]) 
     days[day].items.push(item); 
    else 
    days[day] = { Day: '0' + day, Title: d.doc.Title, items: item]}; 
}); 

days.sort(function (x, y) { 
    return parseInt(x.Day) > parseInt(y.Day); 
}); 

var eventsinOrder = { order: days }; 

Вам не нужен Угловой Foreach, но вы можете легко заменить его в:

var days = []; 
angular.forEach(arr, function (val, key) { 
    var day = parseInt(val.doc.Day); 
    var item = { name: val.doc.name, count: val.doc.count }; 

    if (days[day]) 
     days[day].items.push(item); 
    else 
     days[day] = { Day: '0' + day, Title: val.doc.Title, items: [item]}; 
}); 

days.sort(function (x, y) { 
    return parseInt(x.Day) > parseInt(y.Day); 
}); 

var eventsinOrder = { order: days }; 

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

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