Javascript 无法筛选嵌套的json对象

Javascript 无法筛选嵌套的json对象,javascript,node.js,Javascript,Node.js,我想根据GUI中的用户输入,使用procedureName&hospitalName过滤下面的json数据 myObject= [ { "department": "Gynic", "treatmentList": [ { "procedureName": "Bone Grafting", "hospitalList": [

我想根据GUI中的用户输入,使用procedureName&hospitalName过滤下面的json数据

myObject= [
    {        
        "department": "Gynic",
        "treatmentList": [
            {
                "procedureName": "Bone Grafting",               
                "hospitalList": [
                    {
                        "hospitalName": "Renai",                        
                    },
                    {
                        "hospitalName": "Aster",                        
                    },
                    {
                        "hospitalName": "Appolo",                        
                    }
                ],                
            },
            {                
                "procedureName": "IVF",                
                "hospitalList": [
                    {
                        "hospitalName": "Renai",                        
                    }
                ],               
            }
        ]
    }
]
例如,当上面的json使用程序名“Bone Grafting”和医院名“Renai”进行过滤时,我应该得到以下格式的结果

     [
    {        
        "department": "Gynic",
        "treatmentList": [
            {
                "procedureName": "Bone Grafting",               
                "hospitalList": [
                    {
                        "hospitalName": "Renai",                        
                    },
                    {
                        "hospitalName": "Aster",                        
                    },
                    {
                        "hospitalName": "Appolo",                        
                    }
                ],                
            }
        ]
    }
]
我尝试了下面的代码,但它没有过滤json

var x = myObject.filter(function (obj) {
    return obj.treatmentList.some(function (item) {
        return item.procedureName == 'Bone Grafting';
    });
});

有人能帮我纠正代码中的错误吗?

不确定这是否是最好的方法,但您可以尝试类似的方法

变量myObject=[{ 部门:妇科, 治疗清单:[{ 程序名称:骨移植, 住院医生:[{ 医院名称:Renai, }, { 医院名称:阿斯特, }, { 医院名称:阿波洛, }], }, { 程序名称:体外受精, 住院医生:[{ 医院名称:Renai, }], }] }]; 函数searchprocedureName,hospitalName{ 返回myObject[0]。treatmentList.filtere=>{ 如果e.procedureName===procedureName{ 返回e.hospitalList.filter=>{ 返回h.hospitalName===hospitalName } } } } console.logsearchIVF,RenaiArray。有些人只需要数组中至少一个元素就可以通过测试。因此filter方法返回true,不过滤任何内容

以下方法可以满足您的需求

var x = myObject.map(function (obj) {
    obj.treatmentList = obj.treatmentList.filter(function (item) {
        return item.procedureName == 'Bone Grafting' &&
            item.hospitalList.some(function (hospital) {
                return hospital.hospitalName == 'Renai';
            });
    });
    return obj;
});
观察 您需要在myObject数组上循环。 为hospitalList数组添加某个函数的新调用,并与hospitalNameattribute进行比较。 最后将找到的匹配项添加到treatmentList数组中。 变量myObject=[{ 部门:妇科, 治疗清单:[{ 程序名称:骨移植, 住院医生:[{ 医院名称:Renai, }, { 医院名称:阿斯特, }, { 医院名称:阿波洛, } ], }, { 程序名称:体外受精, 住院医生:[{ 医院名称:Renai, }], } ] }]; var myResultObject=[]; 对于var i=0;iconsole.logmyResultObject;我觉得还可以。在您的示例中,它应该过滤为长度为1的数组。你得到了什么结果?我用过滤器替换了一些。它返回myObject作为输出,基本上没有进行过滤根据OP的问题,他也在过滤医院名称:例如,当上面的json使用程序名称“Bone Grafting”和医院名称“Renai”进行过滤时,我应该以下面的格式得到结果。因此,还需要添加一个检查,以验证输入的医院名称是否存在于医院列表中。@dvsoukup Yes。我忽略了它。谢谢你提醒。我刚刚更正了我的答案。谢谢。非常好的解决方案