2016-05-05 4 views
-1

У меня есть объект, который имеет объекты JSON под названиемУдаление дубликатов из массива объектов

mainobject =

Array[2] 
>0: object 
>Innerobject1 : Array[2] 
    >0 : object 
    Name : "Xavier" 
    Dup : "B" 
    >1 : object 
    Name : "Gh" 
    Dup : "B" 
>1: object 
>Innerobject2 : Array[2] 
    >0 : object 
    Name : "Cat" 
    Dup : "C" 
    >1 : object 
    Name : "Dog" 
    Dup : "D" 

мне нужно сделать «DUP», как «», который уже присутствует в первый объект, если любой .My ожидается выход:

Array[2] 
>0: object 
>Innerobject1 : Array[2] 
    >0 : object 
    Name : "Xavier" 
    Dup : "B" 
    >1 : object 
    Name : "Gh" 
    Dup : "" 
>1: object 
>Innerobject2 : Array[2] 
    >0 : object 
    Name : "Cat" 
    Dup : "C" 
    >1 : object 
    Name : "Dog" 
    Dup : "D" 

Edit:

Объекта в формате JSON: :

"[{"Innerobject1":[{"Name" :"Xavier","Dup":"B"},{"Name" :"Gh","Dup":"B"}]}, 
{"Innerobject2":[{"Name" : "Cat","Dup":"C"},{"Name":"Dog", "Dup":"D"}]}]" 
+1

Вы можете показать действительный объект 'mainobject', как он представлен в вашем коде? – RomanPerekhrest

+0

После расширения mainobject это именно то, как я получаю инструменты разработчика. – user1400915

+0

Вы можете использовать 'document.write (JSON.stringify (yourObject));' и получить JSON. –

ответ

1

Я не совсем уверен, что я интерпретировал свой размещенный массив объектов правильных. Но вы можете сделать что-то вроде этого:

Идите по массиву и сохраните ключ, который вы хотите быть уникальным в объекте. Когда встречаются более чем один раз установить новое значение в пустую строку:

var seen = {}; 
mainobject.forEach(function(obj) { 
    if (seen[obj.Name]) { 
     obj.Name = ""; 
    } 
    seen[obj.Name] = true; 
}); 

Вам может понадобиться умножить итерации, иждивенцы на сколько вложенных массивах вы получили:

var seen = {}; 
mainobject.forEach(function(inner_arr) { 
    inner_arr.forEach(function(obj) { 
     if (seen[obj.Name]) { 
      obj.Name = ""; 
     } 
     seen[obj.Name] = true; 
    }); 
}); 
1

Решения с помощью Array.forEach и Object.keys функции :

var mainobject = JSON.parse('[{"Innerobject1":[{"Name" :"Xavier","Dup":"B"},{"Name" :"Gh","Dup":"B"}]},{"Innerobject2":[{"Name" : "Cat","Dup":"C"},{"Name":"Dog", "Dup":"D"}]}]'); 

mainobject.forEach(function(obj){ 
    Object.keys(obj).forEach(function(k){ 
     obj[k].forEach(function(o){ 
      if (this["Dup"]) { 
       (this["Dup"].indexOf(o["Dup"]) !== -1)? o["Dup"] = "" : this["Dup"].push(o["Dup"]); 
      } else { 
       this["Dup"] = [o["Dup"]]; 
      } 
     }) 
    }); 
}, {}); 

console.log(JSON.stringify(mainobject, 0, 4)); 

console.log выход:

[ 
    { 
     "Innerobject1": [ 
      { 
       "Name": "Xavier", 
       "Dup": "B" 
      }, 
      { 
       "Name": "Gh", 
       "Dup": "" 
      } 
     ] 
    }, 
    { 
     "Innerobject2": [ 
      { 
       "Name": "Cat", 
       "Dup": "C" 
      }, 
      { 
       "Name": "Dog", 
       "Dup": "D" 
      } 
     ] 
    } 
] 
Смежные вопросы