我正在使用AngularJS对数组的所有子文档进行分组。它只能分组子文档的第一项,并给出长度如何得到其正确长度的计数。我的plunk link。
我现在得到的结果是
Isnain Meals - 1
Chicken Burger - 2
预期结果
Isnain Meals - 2
Chicken Burger - 2
HTML
<body ng-controller="MainCtrl">
<div ng-repeat="(key, data) in groupedByFoodName">
<p>{{key}} - {{data.length}}</p>
</div>
</body>
控制器JS
$scope.groupedByFoodName= _.groupBy($scope.lists, function (each) { return each.orderfood[0].name });
JSON
$scope.lists = [
{
"_id": "56b0c315e179bb0e00a44dbf",
"orderfood": [
{
"_id": "569d865bff1fe20e00f8ba97",
"qty": "1",
"confirm": true,
"price": 154,
"name": "Isnain Meals"
},
{
"_id": "569d865bff1fe20e00f8ba98",
"qty": "1",
"confirm": true,
"price": 154,
"name": "Isnain Meals"
}
],
"content": "9176649143",
"created": "2016-02-02T14:54:13.926Z"
},
{
"_id": "56b06ed25b53250e00ccbd73",
"orderfood": [
{
"_id": "569d84f04834c10e003dff36",
"qty": "1",
"confirm": true,
"price": 125,
"name": "Chicken Burger"
}
],
"content": "6886058585",
"created": "2016-02-02T08:54:42.986Z"
},
{
"_id": "56b06ed25b53250e00ccbd74",
"orderfood": [
{
"_id": "569d84f04834c10e003dff37",
"qty": "1",
"confirm": true,
"price": 125,
"name": "Chicken Burger"
}
],
"content": "6886058585",
"created": "2016-02-02T08:54:42.986Z"
}];
答案 0 :(得分:1)
试试这个
var groupedByFoodName= _.chain(lists).map(function(each){ return each.orderfood}).flatten().groupBy(function (each) { console.log(each); return each.name }).value();
你写的不是_.groupBy
,它只返回数组 orderfood 的第一个名字。
jsfiddle上的实例。
<form name="ExampleForm" id="ExampleForm">
<div ng-repeat="(key, data) in groupedByFoodName">
<p>{{key}} - {{data.length}}</p>
</div>
</form>
和JS:
$scope.lists = [{
"_id": "56b0c315e179bb0e00a44dbf",
"orderfood": [{
"_id": "569d865bff1fe20e00f8ba97",
"qty": "1",
"confirm": true,
"price": 154,
"name": "Isnain Meals"
}, {
"_id": "569d865bff1fe20e00f8ba98",
"qty": "1",
"confirm": true,
"price": 154,
"name": "Isnain Meals"
}],
"content": "9176649143",
"created": "2016-02-02T14:54:13.926Z"
}, {
"_id": "56b06ed25b53250e00ccbd73",
"orderfood": [{
"_id": "569d84f04834c10e003dff36",
"qty": "1",
"confirm": true,
"price": 125,
"name": "Chicken Burger"
}],
"content": "6886058585",
"created": "2016-02-02T08:54:42.986Z"
}, {
"_id": "56b06ed25b53250e00ccbd74",
"orderfood": [{
"_id": "569d84f04834c10e003dff37",
"qty": "1",
"confirm": true,
"price": 125,
"name": "Chicken Burger"
}],
"content": "6886058585",
"created": "2016-02-02T08:54:42.986Z"
}];
$scope.groupedByFoodName = _.chain($scope.lists).map(function(each) {
return each.orderfood
}).flatten().groupBy(function(each) {
return each.name
}).value();