2016-03-29 1 views
0

Ich habe ein Objekt wie unten:Duplikate suchen in Objekten innerhalb eines Objekts in Strich

result = { 
    1:{name:'john', age: 20, sex:'M'}, 
    2:{name:'smith', age: 25, sex:'M'}, 
    3:{name:'john', age: 20, sex:'M'}, 
    4:{name:'anna', age: 22, sex:'F'} 
} 

ich überprüfen müssen, wenn jedes Objekt anhand von Namen und das Alter bereits in der Tabelle vorhanden und true zurück, wenn es eine ist Duplikat.

Wie würde ich das tun?

Vielen Dank.

+0

Verwendung '_.find()' ... – dandavis

Antwort

0

Eine Möglichkeit, dies zu tun wäre

  1. Kette sein, der result Objekt
  2. Pass es zu map, so können wir ein Array erhalten von Werten, dh [{name: 'John', Alter: 20 , Geschlecht: 'M'}, {Name: 'Smith', Alter: 25, Geschlecht: 'M'}, {Name: 'John', Alter: 20, Geschlecht: 'M'}, {Name: 'John' , Alter: 22, Geschlecht: 'M'}, {Name: 'Anna', Alter: 22, Geschlecht: 'F'}] Bemerkungen: Wenn Sie die Schlüssel nicht brauchen, zB 1 :, 2: dann holen Sie sich die Ergebnis als Ergebnis = [Objekt, Objekt ...]. Dann Schritt 2 ist nicht notwendig
  3. übergibt es an groupBy('name') die Gruppe der Arrays in 2 nach Namen
  4. übergibt es an filter und Filter, bei dem die Array-Länge von> 1
  5. Da das Ergebnis verschachtelt ist, gibt sie an flatten
  6. Jetzt wiederholen 3 bis 5 für age
  7. Verwenden value() den Wert des verpackten Objekts zu extrahieren

    var duplicate = _.chain(result) 
            .map(function(value, key){return value;}) 
            .groupBy('name') 
            .filter(function(array){ return array.length > 1}) 
            .flatten() 
            .groupBy('age') 
            .filter(function(array){ return array.length > 1}) 
            .flatten() 
            .value() 
            .length > 1 ? true: false ; 
    
        console.log(duplicate); 
    

JSFIDDLE

+0

Thankyou @Sami .., die gearbeitet. – zendev