我有这样的json数据。我想要准确计算"传递"在我的json中的价值。
[{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "Ready"
},{
"Status1" : "Fail",
"Status2" : "pass",
"Status3" : "Ready"
},{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "pass"
},{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "Ready"
}]
这是我想要失败的原因。
var count = 0;
for(var pass in json)
if(json.hasOwnProperty(pass))
count++;
答案 0 :(得分:2)
您可以根据对象是否包含任何值为" pass"的属性来过滤对象。像这样:
const data = [{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "Ready"
},{
"Status1" : "Fail",
"Status2" : "pass",
"Status3" : "Ready"
},{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "pass"
},{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "Ready"
}]
const count = data.filter(obj => Object.keys(obj).some(key => {
return obj[key] === 'pass'
})).length
console.log(count)

有用的方法:
答案 1 :(得分:1)
你非常接近:
var count = 0;
for(var obj of json)
count += Object.values(obj).filter(k => k === "pass").length;
你需要遍历json数组中的所有对象,然后过滤它们的值以仅包含“pass”,计算它们(通过.length)并将它们相加(+ =)。
如果您不想获得总“通过”计数,但包含通过值的对象数量更容易:
var count = 0;
for(var obj of json)
if(Object.values(obj).includes("pass")) count++;
ES5中的全部内容:
var count = 0;
for(var key in json)
if(Object.keys(json[key]).filter(function(sub){return json[key][sub] === "pass";}).length) count++;
答案 2 :(得分:0)
const data = [{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "Ready"
},{
"Status1" : "Fail",
"Status2" : "pass",
"Status3" : "Ready"
},{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "pass"
},{
"Status1" : "pass",
"Status2" : "Fail",
"Status3" : "Ready"
}]
console.log(Object.keys(data).length);