Javascript AngularJS计数ID等于的JSON数组中的项目数

Javascript AngularJS计数ID等于的JSON数组中的项目数,javascript,json,angularjs,Javascript,Json,Angularjs,我可以使用以下方法获得JSON数组中的文章总数: Home.html <div ng-controller="pfcArticleCountCtrl">Number of Articles {{articlecount.length}} items</div> }])) Services.js // Articles by ID pfcServices.factory('pfcArticles', ['$resource', function ($resource) {

我可以使用以下方法获得JSON数组中的文章总数:

Home.html

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

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)


如何按类别计算文章数量?

首先对数组进行排序
var data=[](您的数据)

data.sort(排序);
函数排序(a,b){
如果(a.articlecategoryidb.articlecategoryid)
返回1;
返回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');
    }
var电流=null;
var-cnt=0;
对于(变量i=0;i0){
document.write('Category'+current+'-->'+cnt+'times
'); } 当前=数据[i]。articlecategoryid; cnt=1; }否则{ cnt++; } } 如果(cnt>0){ document.write('Category'+current+'-->'+cnt+'times'); }

参见

中的示例,您可以使用reduce创建一个对象,其中cat id作为名称,count作为值:

$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;
}, {});
通过作用域公开它,并通过ng repat显示它

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

  • 类别{{key}}:{{value}

A工作

你的问题是什么?我看不到任何问号……这不是问题所在。您需要循环查看结果以计算所有类别。只有在这之后,在文章的末尾添加了angulars视图模型问题。它如何最适合angulars的输出?例如,$scope.count=document.write('Category'+current+'-->'+cnt+'times');
$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;
}, {});
<div ng-app='article' ng-controller='ArticleController'>
 <ul>
     <li ng-repeat='(key, value) in articleByCat'>Category {{key}} : {{value}}</li>
    </ul>
 </div>