Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:如何获得具有特定值的对象的计数?_Javascript - Fatal编程技术网

Javascript 角度:如何获得具有特定值的对象的计数?

Javascript 角度:如何获得具有特定值的对象的计数?,javascript,Javascript,我有一个包含对象的JSON数据库。每个属性都有一个特定的赋值:a、b或c [ { "id": 1, "category": "a" }, { "id": 2, "category": "b" }, { "id": 3, "category": "c" }, { "id": 4, "category": "a" }, { "id": 5, "category": "a" },

我有一个包含对象的JSON数据库。每个属性都有一个特定的赋值:a、b或c

[
  {
    "id": 1,
    "category": "a"
  },
  {
    "id": 2,
    "category": "b"
  },
  {
    "id": 3,
    "category": "c"
  },
  {
    "id": 4,
    "category": "a"
  },
  {
    "id": 5,
    "category": "a"
  },
  {
    "id": 5,
    "category": "b"
  }
]
我想显示如下内容:

共有6项项目:a x3项、b x2项和c x1项

我知道我必须使用
objectsinmyjsondatabase.length
来获得总数


我想知道如何获得具有特定值的对象的长度(数量)?

您可以很容易地计算具有特定值的对象,就像这样

let对象=[
{
“id”:1,
“类别”:“a”
},
{
“id”:2,
“类别”:“b”
},
{
“id”:3,
“类别”:“c”
},
{
“id”:4,
“类别”:“a”
},
{
“id”:5,
“类别”:“a”
},
{
“id”:5,
“类别”:“b”
}
];
var filtered=新数组();
对象。过滤器(函数(t){
var found=filtered.some(函数(el,索引){
if(false==(t.category==el.category)){
返回false;
}
已筛选[索引]。计数=已筛选[索引]。计数+1;
返回true;
},过滤);
if(false==found){
push({category:t.category,count:1});
}
},过滤);
console.log('总共有'+objects.length+'项:'
+过滤后的.map(函数(t){
返回t.category+x'+t.count;
})

);您可以很容易地计算具有如下特定值的对象

let对象=[
{
“id”:1,
“类别”:“a”
},
{
“id”:2,
“类别”:“b”
},
{
“id”:3,
“类别”:“c”
},
{
“id”:4,
“类别”:“a”
},
{
“id”:5,
“类别”:“a”
},
{
“id”:5,
“类别”:“b”
}
];
var filtered=新数组();
对象。过滤器(函数(t){
var found=filtered.some(函数(el,索引){
if(false==(t.category==el.category)){
返回false;
}
已筛选[索引]。计数=已筛选[索引]。计数+1;
返回true;
},过滤);
if(false==found){
push({category:t.category,count:1});
}
},过滤);
console.log('总共有'+objects.length+'项:'
+过滤后的.map(函数(t){
返回t.category+x'+t.count;
})
);定义函数:

getCount(character) {
  return this.objects.filter(obj => obj.category === character).length;
}
并将其称为:
this.getCount('a')

定义函数:

getCount(character) {
  return this.objects.filter(obj => obj.category === character).length;
}
并将其称为:
this.getCount('a')

解决问题的一种方法是使用map reduce。这里有一个快速的解决方案。希望这能解决你的问题

var数据=[
{
“id”:1,
“类别”:“a”
},
{
“id”:2,
“类别”:“b”
},
{
“id”:3,
“类别”:“c”
},
{
“id”:4,
“类别”:“a”
},
{
“id”:5,
“类别”:“a”
},
{
“id”:5,
“类别”:“b”
}
];
//首先获取所有类别的列表
var categories=data.map(函数(x){returnx[“category”];});
//计算每个类别中的项目数
var countByCategories=categories.reduce(函数(x,y){
如果(x的类型!=“对象”){
var-reduced={};
约化[x]=1;
减少的[y]=1;
回报减少;
}
x[y]=(x[y]| 0)+1;
返回x;
});
//您想要的最终生成字符串
var类别字符串=[];
for(countByCategories中的var类别){
categoryStrings.push(category+x'+countByCategories[category]);
}
var msg='共有'+categories.length+'项:';
如果(categoryStrings.length>2){
msg=categoryStrings.slice(0,-1).join(',');
msg+='和'+类别字符串.slice(-1);
}否则{
msg=categoryStrings.join(',');
}
//打印结果

控制台日志(msg)解决问题的一种方法是使用map reduce。这里有一个快速的解决方案。希望这能解决你的问题

var数据=[
{
“id”:1,
“类别”:“a”
},
{
“id”:2,
“类别”:“b”
},
{
“id”:3,
“类别”:“c”
},
{
“id”:4,
“类别”:“a”
},
{
“id”:5,
“类别”:“a”
},
{
“id”:5,
“类别”:“b”
}
];
//首先获取所有类别的列表
var categories=data.map(函数(x){returnx[“category”];});
//计算每个类别中的项目数
var countByCategories=categories.reduce(函数(x,y){
如果(x的类型!=“对象”){
var-reduced={};
约化[x]=1;
减少的[y]=1;
回报减少;
}
x[y]=(x[y]| 0)+1;
返回x;
});
//您想要的最终生成字符串
var类别字符串=[];
for(countByCategories中的var类别){
categoryStrings.push(category+x'+countByCategories[category]);
}
var msg='共有'+categories.length+'项:';
如果(categoryStrings.length>2){
msg=categoryStrings.slice(0,-1).join(',');
msg+='和'+类别字符串.slice(-1);
}否则{
msg=categoryStrings.join(',');
}
//打印结果

控制台日志(msg)如果您希望在视图中进行计数,这将对您有所帮助。如果您希望在视图中进行计数,这将对您有所帮助。我需要在哪里声明此函数?“在我的组件中还是在我的服务中?”乔纳森我认为这应该用组件来写。服务应该按原样将数据传递给组件。但是,您也可以在服务中进行筛选。我需要在哪里声明此函数?“在我的组件中还是在我的服务中?”乔纳森我认为这应该用组件来写。服务应该按原样将数据传递给组件。但是,您也可以在服务中进行过滤。