我想在嵌套对象中找到所有重复的值。 例如,我想要以下宠物对象:
var pets = {
owner1: 'Frank',
owner2: 'Curly',
owner3: 'Maurice',
dogs: {
terriers: {
name1: 'Fido',
name2: 'Woofy',
name3: {
goodDog: 'Frank',
badDog: 'Judas',
}
},
poodles: {
name1: 'Curly',
name2: 'Fido',
},
},
};
返回一个数组:
['Frank', 'Curly', 'Fido']
没有特别的顺序。感谢。
答案 0 :(得分:2)
您必须迭代并存储密钥,然后检查重复项
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) {
if (typeof o[key] === "object") iterate(o[key]);
temp.indexOf(o[key]) === -1 ?
temp.push(o[key]) :
dupes.indexOf(o[key]) === -1 && typeof o[key] === "string" ?
dupes.push(o[key]) : o;
}
})(pets);
document.body.innerHTML = '<pre>' + JSON.stringify(dupes) + '</pre>';
答案 1 :(得分:0)
此提案适用于两个以上相同的值。
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>');