在对象的对象上使用多个键值过滤器?

Use multiple key-value filters on an object of objects?

有点冗长,喜欢挑战的人(或者我只是知识不够 - 希望这是一个简单的解决方案!)请继续阅读!

(跳到实际问题部分以跳过解释和我试过的内容)

问题

我有一个网站有一个数据集,其中包含一个对象,里面有多个对象。这些对象中的每一个都包含一个数组,并且在该数组中有多个对象。 (是的,这很痛苦,但它来自 API,我需要在不更改或修改它的情况下使用此数据集。)我正在尝试根据最终对象中的键值对过滤数据集。但是,我同时执行了多个过滤器。

循环前路径示例,检索一个大厅所需的键值对。

["Hamilton Hall"]["Hire Options"][2].Commercial

所有大厅所需键值对的循环路径后,不仅是一个(存储大厅标识符):

[0]["Hire Options"][2].Commercial

循环允许我检查每个大厅的特定键值对(有点像 map 或 forEach,但针对的是一个对象)。

在解决这个问题之后回到问题。

我将如何过滤显示哪些循环对象?

我试过的

(userInput 在其他地方定义 - 这发生在 btn 单击 btw)

    let results = Object.keys(halls);
    for (key of results) {
        let weekend = [halls[ `${key}` ][ 'Hire Options' ][4][ 'Weekend function' ]];
        if(userInput == weekend) {
            outputAll([halls[ `${key}` ]]);
        }
    }

过滤得很好。但是,我运行在这里遇到了一个问题。我想通过多个查询进行过滤,自然而然地在 if 语句中添加一个 AND 是行不通的。我也不想有 10 个 if 语句(我有 10 多个不同数据类型的过滤器,我需要作为排序依据)。

我最近听说了三元运算符,但对它们的了解还不够,不知道这样做是否正确?如果是这样,如何?还简要查看了开关,但看起来不像我想要的(如果我错了请纠正我。)

实际问题减去 babble/explanation

有没有办法动态修改 if 语句条件?例如添加或删除 if 语句的条件?比如如果'a'的过滤器设置为关闭,去掉if语句中'a'的AND条件?这意味着结果将仅使用活动过滤器进行过滤。

非常感谢任何帮助、评论或“你为什么不尝试这个”的评论!

谢谢!

仅供额外参考,以下是循环遍历第一个对象时从中检索每个对象的代码:

(循环代码)

        halls = data[ 'Halls' ];
        let results = Object.keys(halls);
        for (key of results) {
            let arr = [halls[ `${key}` ]];
            outputAll(arr);
        }

您可以在键数组上使用 Array.filter - 您可以按照自己喜欢的方式构建匹配逻辑 - 如果找到匹配且需要元素,只需将其设置为 return true显示。

let results = Object.keys(halls);
results.filter(key => {
    if (userInput == halls[key]['Hire Options'][4]['Weekend function']) {
      return true;
    }
    if (some other condition you want to match) {
      return true;
    }
    return false;
}).forEach(key => outputAll([halls[key]]));