如何过滤嵌套对象?

时间:2019-01-16 07:18:48

标签: javascript jquery

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

{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": []
        }
    },
}

2 个答案:

答案 0 :(得分:1)

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

结果是一个具有所需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);

答案 1 :(得分:0)

这是我目前可以想到的最简单的方法。

您可以随时进行改进,因为这只是您的指南。

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

const 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": []
      }
    },
  }
}

console.log(data[filter.gm][filter.rm][filter.am][filter.sales][filter.state])