AngularJs 中的数据分组

Grouping Of Data in 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 字段(可以是汤、披萨、意大利面等)对菜单项进行分组。

这样所有 "head" 的项目:"soups" 将一起列出,所有 "head" 的项目:"pizza" 将一起列出。

我想到的方法是通过设计自定义过滤器,我将在其中传递所有唯一的 "head" 属性,然后我将相应地获取数据。

只需要一种更好、更优化的方法来应对这种情况。

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 包含具有该头的盘子数组。

根据调用过滤器的频率,您可能应该只对数据进行后处理并创建一个新的结果集,并按正确的值分组。像(未经测试):

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 或其他内容。