首页 > 解决方案 > 如何过滤嵌套对象?

问题描述

我正在制作过滤器菜单。我有一个类似下面的对象。从我的过滤器菜单中,我将得到一个对象结果:

{gm: "FS H", rm: "RSM1", am: "BKK PULL", sales: "BKK SR1", state: "delhi", …}

从这个结果中,我需要找到相关的 sa_id 和 pr_id。从上面的结果: gm 是顶级菜单。rm 根据所选的 gm 进行过滤。

给定的是我的整个对象。现在我不知道如何过滤以获取我的 ID。

{
"FS H": {
    "RSM1": {
        "BKK PULL": {
            "BKK SR1": {
                mumbai: {
                    sa_id: 34,
                    pr_id: 12
                },
                delhi: {
                    sa_id: 12,
                    pr_id: 32
                }
            }
        },
        "BKK PUSH": {
            "BKK BCDE1": [],
            "BKK BAKE SE1": []
        }
    },
}

标签: javascriptjquery

解决方案


您可以按正确顺序获取所需键的数组,并使用过滤器对象的值减少给定对象。

结果是具有所需 id 的对象,或undefined.

function getID(filter) {
    var keys = ['gm', 'rm', 'am', 'sales', 'state'];
    return keys.reduce((o, k) => (o || {})[filter[k]], data);
}

var data = { "FS H": { "RSM1": { "BKK PULL": { "BKK SR1": { mumbai: { sa_id: 34, pr_id: 12 }, delhi: { sa_id: 12, pr_id: 32 } } }, "BKK PUSH": { "BKK BCDE1": [], "BKK BAKE SE1": [] } } } },
    result = getID({ gm: "FS H", rm: "RSM1", am: "BKK PULL", sales: "BKK SR1", state: "delhi" });

console.log(result);


推荐阅读