繁体   English   中英

根据条件过滤嵌套数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM