问题:对一个数组,匹配其中某个子节点的值,返回其对应的路径。
数组实例:
const options = [{
'name': '河北省',
'options': [{
'name': '廊坊市',
'options': [{
'name': '廊坊XXX4s专营店',
'options': []
}, {
'name': '燕郊FFFF4s直营店',
'options': []
}]
}]
}, {
'name': '吉林省',
'options': [{
'name': '长春市',
'options': [{
'name': '长春QQQ4s直营店',
'options': []
}]
}]
}];
例如:给定「燕郊FFFF4s直营店」,返回 ['河北省', '廊坊市', '燕郊FFFF4s直营店']
JavaScript实现代码:
const search = (options, target) => {
const result = [];
try {
const getNodePath = tree => {
for(let i = 0; i < tree.length; i++) {
const item = tree[i];
result.push(item.name);
if (item.name === target) {
throw new Error('get it!');
}
if (item.options && item.options.length) {
for(let j = 0; j < item.options.length; j++) {
getNodePath(item.options)
}
}
// 没有叶子节点,自己也不是,pop
result.pop();
}
}
getNodePath(options);
return result;
}
catch(e) {
return result;
}
}
运行结果: