2016-03-23 12 views
-3

Ich möchte alle doppelten Werte in einem verschachtelten Objekt suchen. Zum Beispiel würde ich die folgenden Haustiere mag einwenden:Listet alle doppelten Werte in einem verschachtelten JavaScript-Objekt auf

var pets = { 
    owner1: 'Frank', 
    owner2: 'Curly', 
    owner3: 'Maurice', 
    dogs: { 
    terriers: { 
     name1: 'Fido', 
     name2: 'Woofy', 
     name3: { 
     goodDog: 'Frank', 
     badDog: 'Judas', 
     } 
    }, 
    poodles: { 
     name1: 'Curly', 
     name2: 'Fido', 
    }, 
    }, 
}; 

einen Array zurück:

['Frank', 'Curly', 'Fido'] 

in keiner bestimmten Reihenfolge. Vielen Dank.

+5

Bitte teilen, was Sie dieses Problem getan haben, so weit zu lösen. StackOverflow ist eine Code-fixierende Community, keine Code-schreibende Community. – Blazemonger

Antwort

2

Hier finden Sie die Schlüssel iterieren und speichern müssen, dann überprüfen Sie

var pets = { 
 
    owner1: 'Frank', 
 
    owner2: 'Curly', 
 
    owner3: 'Maurice', 
 
    dogs: { 
 
    terriers: { 
 
     name1: 'Fido', 
 
     name2: 'Woofy', 
 
     name3: { 
 
     goodDog: 'Frank', 
 
     badDog: 'Judas', 
 
     } 
 
    }, 
 
    poodles: { 
 
     name1: 'Curly', 
 
     name2: 'Fido', 
 
    }, 
 
    }, 
 
}; 
 

 
var temp = []; 
 
var dupes = []; 
 

 
(function iterate(o) { 
 
    for (var key in o) { 
 
    \t if (typeof o[key] === "object") iterate(o[key]); 
 
     temp.indexOf(o[key]) === -1 ? 
 
     \t temp.push(o[key]) : 
 
     \t dupes.indexOf(o[key]) === -1 && typeof o[key] === "string" ? 
 
     \t dupes.push(o[key]) : o; 
 
    } 
 
})(pets); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(dupes) + '</pre>';

0

Dieser Vorschlag, auch für mehr als zwei gleiche Werte arbeitet nach Duplikaten.

var pets = { owner1: 'Frank', owner2: 'Curly', owner3: 'Maurice', dogs: { terriers: { name1: 'Fido', name2: 'Woofy', name3: { goodDog: 'Frank', badDog: 'Judas', } }, poodles: { name1: 'Curly', name2: 'Fido', name3: 'Fido', }, }, }, 
 
    temp = {}, 
 
    dupes = []; 
 

 
(function iterate(o) { 
 
    Object.keys(o).forEach(function (key) { 
 
     if (typeof o[key] === "object") { 
 
      return iterate(o[key]); 
 
     } 
 
     temp[o[key]] = (temp[o[key]] || 0) + 1; 
 
     temp[o[key]] === 2 && dupes.push(o[key]); 
 

 
    }); 
 
})(pets); 
 

 
document.write('<pre>' + JSON.stringify(dupes, 0, 4) + '</pre>');

Verwandte Themen