2015-01-28 5 views
0

Я строю сайт для ресторана. На сайте я показываю меню ресторана на странице.Группировка данных в AngularJs

пунктов меню JSon, я получаю от сервера выглядит следующим образом: -

{ 
    "_id" : ObjectId("54c3c6e6cd7fe7df22cae87e"), 
    "restaurant" : ObjectId("54b3a7ef613e89f64654f2b3"), 
    "name" : "Pasta", 
    "itemCode" : "PST", 
    "price" : 240, 
    "sellingPrice" : 280, 
    "cuisine" : "Ittalian", 
    "category" : "starter", 
    "type" : "non-veg", 
    "created" : ISODate("2015-01-24T16:23:02.652Z"), 
    "Head" : pasta 
    "__v" : 0 
} 

Поэтому в основном требование к пунктам меню группы на основе поля головы (которые могут быть супы, пицца, макаронные изделия, и т.д).

, так что весь предмет с «головой»: «супы» будут перечислены вместе, и весь предмет с «головой»: «пицца» будет списан вместе.

То, как я думал об этом, заключается в разработке настраиваемого фильтра, где я передам весь уникальный атрибут «head», и я получу данные соответствующим образом.

Просто нужен лучший и более оптимизированный подход к ситуации.

ответ

0
var dishesPerHead = {}; 
var heads = []; 
angular.forEach(dishes, function(dish) { 
    var dishesForHead = dishesPerHead[head]; 
    if (!dishesForHead) { 
     dishesForHead = []; 
     heads.push(dish.head); 
     dishesPerHead[dish.head] = dishesForHead; 
    } 
    dishesForHead.push(dish); 
} 

Теперь у вас есть массив отчетливого heads, и для каждой головки, dishesPerHead содержит множество блюд, имеющие эту голову.

1

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

var jsonResults = [{head:'pasta',...},{head:'soups',...}]; 
    , jsonResultsProcessed = { }; 
    , rec 

for(var i=0; i<jsonResults.length; i++) { 
    rec = jsonResults[i]; 
    if(!jsonResultsProcessed[rec.head]) { 
     jsonResultsProcessed[rec.head] = [ rec ]; 
    } else { 
     jsonResultsProcessed[rec.head].push(rec); 
    } 
} 

$scope.results = jsonResultsProcessed; 

, а затем на ваш взгляд, вы можете просто обратиться к results.pizza или любой другой.

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