[英]Filter the nested array based on condition
我有一个这样的对象:
runs =
{
"suites": [
{
"status": "fail",
"testcases": [
{
"status": "pass"
},
{
"status": "fail"
}
]
},
{
"status": "pass",
"testcases": [
{
"status": "pass"
}
]
}
]
}
我想检索测试用例通过和失败的计数(在上述情况下通过:2,失败:1)。 我尝试了以下方法来获得通过次数:
runs.suites.filter(suite => {
suite.testcases.filter(testcase => {
return testcase.status === 'pass';
})
}).length
但这给了我错误的结果。
尝试这个:
var runs = {"suites": [{"status": "fail","testcases": [{"status": "pass"},{"status": "fail"}]},{"status": "pass","testcases": [{"status": "pass"}]}]}; const statuses = runs.suites.reduce((a, b)=> a.testcases.concat(b.testcases)).map(x=> x.status) console.log(statuses.filter(x=> x === "pass").length) // 2 console.log(statuses.filter(x=> x === "fail").length) // 1
您可以使用一个对象进行计数。
var runs = { "suites": [{ "status": "fail", "testcases": [{ "status": "pass" }, { "status": "fail" }] }, { "status": "pass", "testcases": [{ "status": "pass" }] }] }, count = {} runs.suites.forEach(a => a.testcases.forEach(b => count[b.status] = (count[b.status] || 0) + 1)); console.log(count);
尝试这个
// Code goes here
runs =
{
"suites": [
{
"status": "fail",
"testcases": [
{
"status": "pass"
},
{
"status": "fail"
}
]
},
{
"status": "pass",
"testcases": [
{
"status": "pass"
}
]
}
]
};
var count = 0;
var test = runs.suites.filter(suite => {
suite.testcases.filter(testcase => {
(testcase.status=='pass')?count++:count;
})
return count;
});
console.log(test.length);
您可以使用Array#reduce
并在对象{pass : 2, fail : 1}
计算通过/失败的次数
var runs = {"suites": [{"status": "fail","testcases": [{"status": "pass"},{"status": "fail"}]},{"status": "pass","testcases": [{"status": "pass"}]}]}; var obj = runs.suites.reduce( (tot, curr)=> { curr.testcases.forEach(tc=>{ tc.status === 'pass' ? tot.pass++ : tot.fail++; }); return tot; }, {pass : 0, fail : 0}); console.log(obj);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.