2015-01-08 4 views
0

я могу получить общее количество ряда статей в массиве JSON, используя следующий:AngularJS подсчитать количество элементов в массиве JSON, где ID равно

home.html

<div ng-controller="pfcArticleCountCtrl">Number of Articles {{articlecount.length}} items</div> 

Controllers.js

// Count number of total articles 
pfcControllers.controller('pfcArticleCountCtrl', ['$scope', 'pfcArticles', function ($scope, pfcArticles) { 
$scope.articlecount = pfcArticles.query(); 

}]);

Services.js

// Articles by ID 
pfcServices.factory('pfcArticles', ['$resource', function ($resource) { 
    return $resource('https://myrestcall.net/tables/articles/:articleID', { articleID: '@id' }, 
    { 
     'update': { method:'PATCH'} 
    } 
    ); 
}]); 

Но я также хотел бы, чтобы отобразить количество статей по категориям. Вот пример JSON возврата:

[ 
{ 
"id": "66D5069C-DC67-46FC-8A51-1F15A94216D4", 
"articletitle": "artilce1", 
"articlecategoryid": 1, 
"articlesummary": "article 1 summary. " 
}, 
{ 
"id": "66D5069C-DC67-46FC-8A51-1F15A94216D5", 
"articletitle": "artilce2", 
"articlecategoryid": 2, 
"articlesummary": "article 2 summary. " 
}, 
{ 
"id": "66D5069C-DC67-46FC-8A51-1F15A94216D6", 
"articletitle": "artilce3", 
"articlecategoryid": 3, 
"articlesummary": "article 3 summary. " 
}, 
{ 
"id": "66D5069C-DC67-46FC-8A51-1F15A94216D7", 
"articletitle": "artilce4", 
"articlecategoryid": 1, 
"articlesummary": "article 3 summary. " 
}, 
] 

В этом случае общее значение счетчика 4, но для категории 1, должно быть 2. Я хочу, чтобы отобразить это на странице следующим образом:

Категория 1 (2) Категория 2 (1) Категория 3 (1)

Всего статей (4)

Как подсчитать количество статей по категориям?

+0

Что ваш вопрос? Я не вижу никаких вопросительных знаков ... – maerics

+0

, что не является угловым корпусом. Вам нужно просмотреть результат, чтобы подсчитать все катехины. Только после этого пойдите с угловым видом модели – paka

+0

Вопрос добавлен в конце сообщения. – Kode

ответ

0

Сначала сортировать массив var data = [ ]; (ваши данные)

data.sort(sort); 

function sort(a,b) { 
    if (a.articlecategoryid < b.articlecategoryid) 
    return -1; 
    if (a.articlecategoryid > b.articlecategoryid) 
    return 1; 
    return 0; 
    } 

Затем посчитайте дубликат значения

var current = null; 
    var cnt = 0; 
    for (var i = 0; i < data.length; i++) { 
     if (data[i].articlecategoryid != current) { 
      if (cnt > 0) { 
       document.write('Category'+current+'-->'+cnt+ ' times<br>'); 
      } 
      current = data[i].articlecategoryid; 
      cnt = 1; 
     } else { 
      cnt++; 
     } 
    } 
    if (cnt > 0) { 
     document.write('Category'+current+'-->'+cnt+ ' times'); 
    } 

смотри пример в here

+0

Как лучше всего подходит для вывода в угловом? Ex. $ scope.count = document.write ('Category' + current + '->' + cnt + 'times'); – Kode

2

Вы можете использовать уменьшить, чтобы создать объект с cat id как имя и счетчик в качестве значения:

$scope.articleByCat = articles.reduce(function (prev, item) { 

    if (!! prev[item.articlecategoryid]) { 
     //category already exist -> increment 
     prev[item.articlecategoryid]++; 
    } else { 
     //category does not exist -> init 
     prev[item.articlecategoryid] = 1; 
    } 
    return prev; 
}, {}); 

Вы разоблачить его по своему масштабу и отобразить его с помощью нг-repat

<div ng-app='article' ng-controller='ArticleController'> 
<ul> 
    <li ng-repeat='(key, value) in articleByCat'>Category {{key}} : {{value}}</li> 
    </ul> 
</div> 

А работает jsfiddle

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