给定像这样的json结构:
{
name: "A",
childNodes: [{
name: "B",
childProps: {
prop_list: [{
name: "BS1"
}, {
name: "BS2"
}]
},
childNodes: [{
name: "C",
childProps: {
prop_list: [{
name: "CS1"
}, {
name: "CS2"
}]
},
}]
}],
childProps: [{
prop_list: [{
name: "AS1"
}, {
name: "AS2"
}]
}]
}
我想确定树中是否存在路径。谁能告诉我什么才是最佳解决方案?我应该在路径中为每个名称迭代树吗?例如:
A, AS1 -> Exists
A, B, BS1 -> Exists
A, B, C, CS1 -> Exists
A, C, CS1 -> Does not exist
我的方法是:获取第一个字符串的对象,查找该对象中的第二个字符串,找到包含第二个字符串的子对象,然后使用它来搜索第三个字符串,依此类推......但我实施起来真的非常困难。如果有人能帮助到我,那就太好了!
我有一个可以返回一个找到字符串的对象的函数。
function findObj(obj, str) {
let res;
if (obj.name && obj.name === str) {
return obj;
} else {
if (obj.childNodes) {
for (let n in obj.childNodes) {
res = findObj(obj.childNodes[n], str);
if (res) {
return res;
}
}
}
if (obj.childProps) {
if (obj.childProps.prop_list) {
for (let n in obj.childProps.prop_list) {
res = findObj(obj.childProps.prop_list[n], str);
if (res) {
return res;
}
}
}
}
return null;
}
}
我需要递归地为给定数组中的每个字符串应用此函数。例如:如果输入数组是[A,B,C],我需要执行以下命令:
findObj((findObj(findObj(obj, "A"), "B"), "C")
如果路径中的一个字符串丢失,该函数将返回null,否则它应该返回数组中最后一个字符串的对象。这需要对所有给定的数组执行。关于如何实现这一点大家有什么建议吗?
发布于 2018-12-05 11:00:15
那这个呢?
function exists(data, path){
var currentNode = data;
return path.split('.').every(function(nextPath){
currentNode = currentNode[nextPath];
return currentNode != undefined;
})
}
用法示例:
var a = { b: [{c: 'some value'}]};
exists(a, 'b.0.c');
https://stackoverflow.com/questions/-100006218
复制相似问题