2016-05-05 18 views
-1

Ich habe ein Objekt, das JSON-ObjekteEntfernen Duplikate aus einem Array von Objekten

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" 

ich die „dup“ als „“ vornehmen müssen, die bereits vorhanden war genannt hat in das erste Objekt, wenn eine .My erwartete Ausgabe ist:

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:

Das Objekt im JSON-Format: :

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

Können Sie das gültige Objekt 'mainobject' anzeigen, wie es in Ihrem Code dargestellt wird? – RomanPerekhrest

+0

Nach dem Expandieren von mainobject, das ist genau, wie ich in Entwicklerwerkzeuge – user1400915

+0

bekomme Sie können 'document.write (JSON.stringify (yourObject));' und JSON erhalten. –

Antwort

1

ich nicht ganz sicher bin, dass ich Ihre geschrieben Array von Objekten korrekt interpretiert haben. Sie können jedoch Folgendes tun:

Iterieren Sie über das Array, und speichern Sie den Schlüssel, der in einem Objekt eindeutig sein soll. Wenn mehr angetroffen dann eingestellt, wenn der neue Wert auf einen leeren String:

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

Sie mehrfach Iterationen benötigen, Bliebene, wie viele verschachtelte Arrays bekommen Sie:

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

Die Lösung mit Array.forEach und Object.keys Funktionen :

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

Die console.log Ausgabe:

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