在JavaScript中按对象参数过滤和计数对象的JSON对象

在JavaScript中按对象参数过滤和计数对象的JSON对象,javascript,json,object,Javascript,Json,Object,我有一个关于JSON对象数据的filter和count的问题 如何对对象进行过滤和计数在site=false?在示例数据中,这将是3 如果SIT的总数是多少?在示例数据中,这将是4 我想为PROD做同样的事情 我尝试了以下方法: var SIT = response.filter(function (obj) { return obj.environment === "SIT"; }); 及 这是我的数据: { "cis": { "dsbgchop193": {

我有一个关于
JSON对象
数据的
filter
count
的问题

如何对
对象进行
过滤
计数
site=
false
?在示例数据中,这将是3

如果SIT的总数是多少?在示例数据中,这将是4

我想为PROD做同样的事情

我尝试了以下方法:

var SIT = response.filter(function (obj) {
    return obj.environment === "SIT";
});

这是我的数据:

{
  "cis": {
    "dsbgchop193": {
      "environment": "SIT", 
      "is_compliant": false
    }, 
    "dsbgchop194": {
      "environment": "SIT", 
      "is_compliant": true
    }, 
    "dsbgchop195": {
      "environment": "SIT", 
      "is_compliant": false
    }, 
    "dsbgchop196": {
      "environment": "SIT", 
      "is_compliant": false
    }, 
    "id": "2017.10.17", 
    "psbgwais1v": {
      "environment": "PROD", 
      "is_compliant": false
    }, 
    "psbgwais2v": {
      "environment": "PROD", 
      "is_compliant": false
    }, 
    "rsbgwais1v": {
      "environment": "PROD", 
      "is_compliant": false
    }, 
    "rsbgwais2v": {
      "environment": "PROD", 
      "is_compliant": true
    }
  }, 
  "rating": "", 
  "ssl": {}
}
您可以在使用对象的关键点时使用它计数并检查条件

var data={cis:{dsbgchop193:{environment:'SIT',is_compliant:false},dsbgchop194:{environment:'SIT',is_compliant:true},dsbgchop195:{environment:'sition:'false},dsbgchop196:{environment:'sition:'SIT,is_compliant:false},id:'2017.10.17',psbgwais1v:{environment:'PROD:'{environment:“PROD”,is_compliant:false},rsbgwais1v:{environment:“PROD”,is_compliant:false},rsbgwais2v:{environment:“PROD”,is_compliant:true},评级:,,ssl:{},
count=Object.keys(data.cis).reduce(函数(r,k){
返回r+!!(data.cis[k].environment=='SIT'&&&!data.cis[k].is_兼容);
}, 0);
console.log(count);
您可以在使用对象的键时使用它进行计数并检查条件

var data={cis:{dsbgchop193:{environment:'SIT',is_compliant:false},dsbgchop194:{environment:'SIT',is_compliant:true},dsbgchop195:{environment:'sition:'false},dsbgchop196:{environment:'sition:'SIT,is_compliant:false},id:'2017.10.17',psbgwais1v:{environment:'PROD:'{environment:“PROD”,is_compliant:false},rsbgwais1v:{environment:“PROD”,is_compliant:false},rsbgwais2v:{environment:“PROD”,is_compliant:true},评级:,,ssl:{},
count=Object.keys(data.cis).reduce(函数(r,k){
返回r+!!(data.cis[k].environment=='SIT'&&&!data.cis[k].is_兼容);
}, 0);

log(count);
过滤器是数组上的函数,而不是对象上的函数,这就是它不起作用的原因

您可以使用
Object.keys
获取密钥, 并将它们映射到
response.cis中的对象,以获得一个数组,以便进行筛选:

var items = Object.keys(response.cis).map(k => response.cis[k]);

items.filter(o => o.environment === "SIT" && !o.is_compliant);
// prints 3

items.filter(o => o.environment === "SIT");
// prints 4

filter
是数组上的函数,而不是对象上的函数,这就是它不起作用的原因

您可以使用
Object.keys
获取密钥, 并将它们映射到
response.cis中的对象,以获得一个数组,以便进行筛选:

var items = Object.keys(response.cis).map(k => response.cis[k]);

items.filter(o => o.environment === "SIT" && !o.is_compliant);
// prints 3

items.filter(o => o.environment === "SIT");
// prints 4
var数据={
“独联体”:{
“DSBG193”:{
“环境”:“坐下”,
“是否符合”:false
}, 
“DSBG194”:{
“环境”:“坐下”,
“是否合规”:正确
}, 
“DSBG195”:{
“环境”:“坐下”,
“是否符合”:false
}, 
“DSBG196”:{
“环境”:“坐下”,
“是否符合”:false
}, 
“id”:“2017.10.17”,
“psbgwais1v”:{
“环境”:“产品”,
“是否符合”:false
}, 
“psbgwais2v”:{
“环境”:“产品”,
“是否符合”:false
}, 
“rsbgwais1v”:{
“环境”:“产品”,
“是否符合”:false
}, 
“rsbgwais2v”:{
“环境”:“产品”,
“是否合规”:正确
}
}, 
“评级”:“,
“ssl”:{}
}
var statistics=Object.keys(data.cis).reduce(函数(stats,key){
var item=data.cis[key];
如果(item.environment=='SIT'){
stats.totalCount+=1;
如果(项目是否符合要求){
stats.compliantCount+=1;
}
}
返回统计;
},{totalCount:0,compliantCount:0});
console.log('statistics:',statistics);
.as控制台包装{最大高度:100%!重要;顶部:0;}
var数据={
“独联体”:{
“DSBG193”:{
“环境”:“坐下”,
“是否符合”:false
}, 
“DSBG194”:{
“环境”:“坐下”,
“是否合规”:正确
}, 
“DSBG195”:{
“环境”:“坐下”,
“是否符合”:false
}, 
“DSBG196”:{
“环境”:“坐下”,
“是否符合”:false
}, 
“id”:“2017.10.17”,
“psbgwais1v”:{
“环境”:“产品”,
“是否符合”:false
}, 
“psbgwais2v”:{
“环境”:“产品”,
“是否符合”:false
}, 
“rsbgwais1v”:{
“环境”:“产品”,
“是否符合”:false
}, 
“rsbgwais2v”:{
“环境”:“产品”,
“是否合规”:正确
}
}, 
“评级”:“,
“ssl”:{}
}
var statistics=Object.keys(data.cis).reduce(函数(stats,key){
var item=data.cis[key];
如果(item.environment=='SIT'){
stats.totalCount+=1;
如果(项目是否符合要求){
stats.compliantCount+=1;
}
}
返回统计;
},{totalCount:0,compliantCount:0});
console.log('statistics:',statistics);

。作为控制台包装{最大高度:100%!重要;顶部:0;}
或使用专用类:

let数据={
“独联体”:{
“DSBGCHOP 193”:{“环境”:“SIT”,“是否符合”:false}
,“dsbgchop194”:{“环境”:“SIT”,“是否符合”:true}
,“DSBGCHOP 195”:{“环境”:“SIT”,“是否符合”:false}
,“dsbgchop196”:{“环境”:“SIT”,“是否符合”:false}
,“id”:“2017.10.17”
,“psbgwais1v”:{“环境”:“产品”,“是否符合”:false}
,“psbgwais2v”:{“环境”:“产品”,“是否符合”:false}
,“rsbgwais1v”:{“环境”:“产品”,“是否符合”:false}
,“rsbgwais2v”:{“环境”:“产品”,“是否符合”:true}},“评级”:“ssl”:{}
}
类FilterableObject{
建造师(h){
这个,h=h;
}
过滤器(参数){
返回此.values.filter(参数)
}
获取值(){
如果(未定义===this.\u values){this.\u values=Object.values(this.h)}
返回此值。\u值;
}
}
F