【发布时间】:2013-10-20 22:39:46
【问题描述】:
我有一组类似于下面的深层 JSON 对象:
var hierarchy = [
{
"title": "category 1",
"children": [
{"title": "subcategory 1",
"children": [
{"id": 1, "title": "name 1"},
{"id": 2, "title": "name 2"},
{"id": 3, "title": "name 3"}
]
},
{"title": "subcategory 2",
"children": [
{"id": 1, "title": "name 4"}
]
}
]
},
{
"title": "category 2",
"children": [etc. - shortened for brevity]
}
];
所以基本上它是一个层次结构 - 有些类别可以有子类别,其中包含具有一些 ID 和名称的对象。我还有一组与最深层次结构级别(没有子对象)相关的 ID,我需要过滤这组对象,以便只保留包含已定义对象的(子)类别。
例如,如果我有一个包含两个 ID 的数组:
var IDs = [2, 3];
结果是:
var hierarchy = [
{
"title": "category 1",
"children": [
{"title": "subcategory 1",
"children": [
{"id": 2, "title": "name 2"},
{"id": 3, "title": "name 3"}
]
}
]
}
];
即整体,整个“类别 2”对象被移除,整个“子类别 2”被移除,ID 为“1”的对象被移除。
问题是这些对象的深度是可变的和未知的 - 有些对象没有孩子,有些有孩子也有孩子等等,任何子类别本身都可以有一个子类别,我基本上需要找到没有孩子的对象已定义 ID 并保留每个 ID 的完整路径的子级。
谢谢。
【问题讨论】:
-
我强烈推荐Underscore(或 Lodash)——它会让你的生活更轻松
-
@Bojangles - 下划线很棒,但它究竟如何帮助我解决这个特定问题?我可能会遗漏一些东西,但我没有看到任何下划线方法可以做到这一点。谢谢。
-
抱歉,我在打电话,没有正确阅读问题。我看到很多复杂的对象迭代立即想到了下划线
标签: javascript json