Giả sử có object lồng nhau chứa dữ liệu thú cưng:
const pets = {
owner1: 'Frank',
owner2: 'Curly',
owner3: 'Maurice',
dogs: {
terriers: {
name1: 'Fido',
name2: 'Woofy',
name3: { goodDog: 'Frank', badDog: 'Judas' }
},
poodles: { name1: 'Curly', name2: 'Fido' }
}
};Viết hàm tìm tất cả giá trị trùng lặp trong object, trả về mảng chứa các giá trị trùng.
Kết quả: ['Frank', 'Curly', 'Fido']
Ví dụ
const pets = {
owner1: 'Frank',
owner2: 'Curly',
owner3: 'Maurice',
dogs: {
terriers: {
name1: 'Fido',
name2: 'Woofy',
name3: { goodDog: 'Frank', badDog: 'Judas' }
},
poodles: { name1: 'Curly', name2: 'Fido' }
}
};
const recursiveSearch = (obj, map = {}, res = []) => {
Object.keys(obj).forEach(key => {
if(typeof obj[key] === "object"){
return recursiveSearch(obj[key], map, res);
};
map[obj[key]] = (map[obj[key]] || 0) + 1;
if(map[obj[key]] === 2){
res.push(obj[key]);
}
});
return res;
};
console.log(recursiveSearch(pets));Kết quả
Kết quả in ra console:
[ 'Frank', 'Curly', 'Fido' ]