Javascript 删除数组中的同一对象

Javascript 删除数组中的同一对象,javascript,arrays,object,duplicates,Javascript,Arrays,Object,Duplicates,我正在搜索以删除存储在数组中的重复对象。此对象以JSON格式发送。这是它的结构: { "name":"root", "children":[ { "name":"name1", "children":[ { "name":"name1", "level":1 } ] }, { "name":"name1", "

我正在搜索以删除存储在数组中的重复对象。此对象以JSON格式发送。这是它的结构:

{  
  "name":"root",
  "children":[  
    {  
      "name":"name1",
      "children":[  
        {  
          "name":"name1",
          "level":1
        }
      ]
    },
    {  
      "name":"name1",
      "children":[  
        {  
          "name":"name1",
          "level":1
        }
      ]
    },
    {  
      "name":"name2",
      "children":[  
        {  
          "name":"name2",
          "level":3
        }
      ]
    }
  ]
}
在这种情况下,第一个或第二个名为name1的对象应该被删除,因为它们完全相同

这是我用来删除副本的算法,但它删除了我数组中的所有对象

for (var z in player.children){
    var nameObject = playerchildren[z].name;
    //console.log(nameObject);
    for (var q in player.children){
        //console.log(player.children[q].name);
        if (nameObject == player.children[q].name){
            console.log(nameObject + " = " + myBubble.children[q].name);
           // delete player.children[z]; // Delete all ...
        } else {
            console.log(nameObject + " != " + player.children[q].name);
        }
    }
}
return player;

感谢您的帮助。

在嵌套循环中,您应该跳过当前对象:

for (var z in player.children){
        var nameObject = playerchildren[z].name;
        //console.log(nameObject);
        for (var q in player.children){
            //console.log(player.children[q].name);
            if (nameObject == player.children[q].name){ 
                 // this is true if z == q. that's why all objects get deleted


for (var z in player.children){
            var nameObject = playerchildren[z].name;
            //console.log(nameObject);
            for (var q in player.children){
                //console.log(player.children[q].name);
                if ( q !== z && nameObject == player.children[q].name){ 
                     // now this should be better

在嵌套循环中,应跳过当前对象:

for (var z in player.children){
        var nameObject = playerchildren[z].name;
        //console.log(nameObject);
        for (var q in player.children){
            //console.log(player.children[q].name);
            if (nameObject == player.children[q].name){ 
                 // this is true if z == q. that's why all objects get deleted


for (var z in player.children){
            var nameObject = playerchildren[z].name;
            //console.log(nameObject);
            for (var q in player.children){
                //console.log(player.children[q].name);
                if ( q !== z && nameObject == player.children[q].name){ 
                     // now this should be better

首先,如果您的算法删除所有对象,这是正常的,因为您的循环首先测试当前对象


请参阅此链接以解决您的问题:

首先,如果您的算法删除所有对象,这是正常的,因为您的循环首先测试当前对象


请参阅此链接以解决您的问题:

好,谢谢,它可以正常工作,但我现在已删除对象的空值。是否可以删除循环中的空值?这可能会有所帮助:这是另一个主题。请尝试找到答案,如果没有,请问另一个问题好的,谢谢,它可以工作,但我现在有空值的对象删除。是否可以删除循环中的空值?这可能会有所帮助:这是另一个主题。请尝试找到答案,如果没有,请再问一个问题