如何从json获取精确的值计数

时间:2017-11-05 10:00:02

标签: javascript

我有这样的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++;

3 个答案:

答案 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);