javascript - json/js/jquery 如何过滤嵌套json数组中的多个对象

标签 javascript jquery json

我在过滤动态嵌套 json 数组中的数据时面临一个小问题。有人可以帮我解决我的问题吗..

var data = {
    "root": {
        "children": [{
                "name": "Concept Phase",
                "order": [{
                    "startTime": "20150101000000",
                    "endTime": "20150125000000"
                }]
            },
            {
                "name": "Design Phase",
                "order": [{
                    "startTime": "2015012500000",
                    "endTime": "20150311000000"
                }]
            },
            {
                "name": "Validation Phase",
                "order": [{
                    "startTime": "2015031100000",
                    "endTime": "20150430000000"
                }]
            },
            {
                "name": "Production Preparation",
                "order": [{
                    "startTime": "2015043000000",
                    "endTime": "20150612000000"
                }]
            }
        ]
    }
}

以上json对象可能会动态增加。现在我尝试通过传递多个对象(name,startTime,endTime)来过滤 JSON。下面是我正在尝试的代码..

var filterBy = {
                         name: ["Concept Phase"],
                         startTime:["20150101000000"],
                         endTime: ["20150125000000"]
                    };

var result = data.root.children.filter(function (o) {
                        return Object.keys(filterBy).every(function (k) {
                            return filterBy[k].some(function (f) {
                                return o[k] === f;
                            });
                        });
                    });

如果我只传递name,上面的代码将起作用。因为我只过滤 children。如何过滤订单中可用的属性?

对于上述 JSON,我需要传递 name,startTime, endTime。预期输出应如下所示..

data = {
    "root": {
        "children": [{
                "name": "Concept Phase",
                "order": [{
                    "startTime": "20150101000000",
                    "endTime": "20150125000000"
                }]
            }
 ]
    }
}

有人可以帮我解决这个问题吗?

提前谢谢您..

最佳答案

您可以在filterBy变量中设置精确的对象,如下所示

var filterBy = {
                         name: "Concept Phase",
                         order:[{
                    "startTime": "20150101000000",
                    "endTime": "20150125000000"
                }]
                    };

然后使用下面的代码从子数组中过滤对象

var result = data.root.children.filter(function (o) {
                        return JSON.stringify(o) === JSON.stringify(filterBy)
                    });

您还可以使用下划线js函数_.isEqual来比较对象,如果原始对象中键值对的顺序不同,这很有用

关于javascript - json/js/jquery 如何过滤嵌套json数组中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60651893/

相关文章:

javascript - angular - 对数组长度时间进行 HTTP 请求并对数组进行 concat 响应

javascript - 事件监听器捕获和冒泡阶段事件

jQuery SlideToggle 和 CSS border-radius 属性在 IE10 中显示异常

json - 读取外部 JSON 文件

json - JSON可以容纳多少有限制吗?

javascript - 以条目数组的形式检索整个文档

php - html中的文本框

javascript - 单击链接时的 jquery SAVE 对话框

javascript - JQuery 事件 $(document).ready 在 iPhone 5 上的移动 safari 中不会触发

javascript - 外部网格中的分页