如果数组中存在重复值,则提醒用户

时间:2017-05-29 10:21:38

标签: javascript

我有一个递归数组结构,如下所示:

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;
    }

1 个答案:

答案 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>