Как получить точное количество значений из JSON

1

У меня есть данные 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++;
Теги:

3 ответа

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++;
  • 0
    Спасибо @Jonas Спасибо. Это работает :)
  • 0
    @ Давид, пожалуйста;)
Показать ещё 3 комментария
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)

Полезные методы:

  • 0
    Благодарю. Это работает :)
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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню