我有数组'arr',因为我有搜索条件name = abc.def,并且需要split('。'),该名称遍历所有节点,如下所示,首先搜索name = abc然后应该在所有匹配项中都更深入,在这里我应该继续搜索条件的第二部分-子name ='def'(实际上是初始搜索关键字“ abc.def”的第二部分)这是我应该通过的数据:
vars={1.1.1:{"no": "1.1.1","name": "Foo"}}
let arr = [
{
"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"
}
]
}
]
}
];
预期结果:遍历层次结构并提取哈希表中所有子匹配项的信息输出:
vars={};
vars[1.1.1]={ "no": "1.1.1","name": "Foo"}
vars[1.1.2]={ "no": "1.1.2","name": "jkl"}
...
例如:
我们可以使用String.split()拆分path
值以分别访问每个属性。
然后我们可以将最终child
数组的内容作为对象返回。
let arr = [ { "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" } ] } ] } ];
function findItem(arr, path, vars) {
var properties = path.split('.').filter(item => item.trim() !== '');
var value = arr;
for (let property of properties) {
if (Array.isArray(value)) {
value = value.find(item => item.name === property);
} else if (value && value['child']) {
value = value.child.find(item => item.name === property);
}
}
if (value && value['child']) {
value.child.forEach(item => {
vars[item.no] = item;
});
}
return vars;
}
let vars = {};
vars = findItem(arr, "abc.def", vars);
console.log(vars);