我想在javascript上搜索嵌套数组/对象上的特定键,并且需要返回所有层次结构,包括它的父级直到root父级以及它的子级。 以下是json示例:
let array = [
{
"no": "1",
"name": "abc",
"child" : [
{
"no": "1.1",
"name": "def",
"child" : [
{
"no": "1.1.1",
"name": "Foo"
},
{
"no": "1.1.2",
"name": "jkl"
}
]
},
{
"no": "1.2",
"name": "Foo",
"child" : [
{
"no": "1.2.1",
"name": "Foo"
},
{
"no": "1.2.2",
"name": "aaaaaaa"
}
]
}
]
},
{
"no": "2",
"name": "abc2",
"child" : [
{
"no": "2.1",
"name": "Foo",
"child" : [
{
"no": "1.1.1",
"name": "ghi"
},
{
"no": "1.1.2",
"name": "jkl"
}
]
},
{
"no": "2.2",
"name": "ghssssi",
"child" : [
{
"no": "2.2.1",
"name": "ghssssi"
},
{
"no": "2.2.2",
"name": "asass"
}
]
}
]
}
];
当我们想要按键=' Foo'进行搜索时,结果会是这样的:
array_result = [
{
"no": "1",
"name": "abc",
"child" : [
{
"no": "1.1",
"name": "def",
"child" : [
{
"no": "1.1.1",
"name": "Foo"
}
]
},
{
"no": "1.2",
"name": "Foo",
"child" : [
{
"no": "1.2.1",
"name": "Foo"
}
]
}
]
},
{
"no": "2",
"name": "abc2",
"child" : [
{
"no": "2.1",
"name": "Foo",
"child" : [
{
"no": "1.1.1",
"name": "ghi"
},
{
"no": "1.1.2",
"name": "jkl"
}
]
}
]
}
];
我确定它需要递归功能。有人有意见吗? 谢谢!
答案 0 :(得分:0)
您可以从原始数组中获取副本并过滤数组,如果它具有所需值或子项具有值。
var array = [{ no: "1", name: "abc", children: [{ no: "1.1", name: "def", children: [{ no: "1.1.1", name: "Foo" }, { no: "1.1.2", name: "jkl" }] }, { no: "1.2", name: "Foo", children: [{ no: "1.2.1", name: "Foo" }, { no: "1.2.2", name: "aaaaaaa" }] }] }, { no: "2", name: "abc2", children: [{ no: "2.1", name: "Foo", children: [{ no: "1.1.1", name: "ghi" }, { no: "1.1.2", name: "jkl" }] }, { no: "2.2", name: "ghssssi", children: [{ no: "2.2.1", name: "ghssssi" }, { no: "2.2.2", name: "asass" }] }] }],
find = 'Foo',
result = JSON.parse(JSON.stringify(array)).filter(function search(a) {
var children;
if (a.name === find) {
return true;
}
if (!Array.isArray(a.children)) {
return false;
}
children = a.children.filter(search);
if (children.length) {
a.children = children;
return true;
}
});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }