У меня есть данные json, подобные этому. Я хочу, чтобы точное значение "pass" в моем 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++;
Вы совсем близко:
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++;
Вы можете фильтровать объекты, если они содержат какое-либо свойство со значением "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)
Полезные методы:
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);