我有一个递归数组结构,如下所示:
var trees = [{
name: "Node-1",
myObj : { name : "Node-1"},
nodes:
[
{ name: "Node-1-1", myObj : { name : "Node-1"}, nodes[]}
]
},{
name: "Node2",
myObj : { name : "Abc"},
nodes: []
}];
var obj = {
name: "Node-1-1",
myObj : { name : "Node-1"},
nodes: []
}
现在我想匹配树数组中的obj.myObj.name值,如果找到则应该立即返回true或false并停止进一步遍历树并提醒用户有关重复发现。
现在你可以obj.myObj.name
值与第一条记录匹配,所以我想提醒用户,但我总是假的。
此处obj.myObj.name
值,即节点-1与trees[0].myObj.name
的第一条记录匹配,因此我想提醒用户。
更新:
基于这个问题给出的答案,我已经更改了代码和示例输入,但现在当我在trees[0].myObj.name
中有Pqr并且obj包含pqr时,所以在树中搜索obj值时我想跳过树中的pqr值因为pqr在其他树中不存在记录,我仍然会得到pqr。
var trees = [{
name: "Node-1",
myObj : { name : "Pqr"},
nodes:
[
{ name: "Node-1-1", myObj : { name : "Abc"}, nodes:[]}
]
},{
name: "Node2",
myObj : { name : "Abc"},
nodes: []
}];
var obj = {
name: "Node-1-1",
myObj : { name : "Pqr"},
nodes: []
}
checkDuplicateNodeName();
function checkDuplicateNodeName() {
var name = obj.myObj.name;
var dupe = false;
for(var idx = 0; idx < trees.length; idx++) {
if(trees[idx].myObj.name != name)
continue;
if(isDuplicateName(trees[idx], name))
{
dupe = true;
break;
}
}
if(dupe){
alert('The name "' + name + ' already exists');
}
else
alert('All is well');
}
function isDuplicateName(node, name) {
var dupeName = node.myObj.name && name && node.myObj.name.toLowerCase() == name.toLowerCase();
if(dupeName) return true;
if(node.nodes){
for(var idx=0; idx< node.nodes.length; idx++) {
if(isDuplicateName(node.nodes[idx], name)){
return true;
}
}
}
return false;
}
答案 0 :(得分:0)
我希望此代码能为您提供解决方案。
<!DOCTYPE html>
<html>
<head>
<script>
var trees = [{
name: "Node-1",
myObj : { name : "Node-1"},
nodes:
[
{ name: "Node-1-1", myObj : { name : "Node-1"}, nodes:[]}
]
},{
name: "Node2",
myObj : { name : "Abc"},
nodes: []
}];
var obj = {
name: "Node-1-1",
myObj : { name : "Node-1"},
nodes: []
}
for(var i = 0; i<trees.length; i++){
if(obj.myObj.name == trees[i].myObj.name){
alert("duplicate found");
break;
}
for(var j=0; j<trees[i].nodes.length; j++){
if(obj.myObj.name == trees[j].nodes[j].myObj.name){
alert("duplicate found");
break;
}
}
break;
}
</script>
</head>
<body>
<div class="data">
</div>
</body>
</html>