สมมติว่าเรามีวัตถุเช่นนี้ −
const obj = {
"name": "Vivek Sharma",
"occupation": "Software Engineer",
"age": 23,
"contacts": [{
"name": "Mukul Sharma",
"occupation": "Software Engineer",
"age": 31,
}, {
"name": "Jay Sharma",
"occupation": "Software Engineer",
"age": 27,
}, {
"name": "Rajan Sharma",
"occupation": "Software Engineer",
"age": 32,
}]
}; ที่นี่จะซ้อนกันได้เพียงระดับเดียว แต่การซ้อนก็สามารถลึกได้เช่นกัน เราจำเป็นต้องเขียนฟังก์ชัน Object Object.prototype.keysOf() ที่รับค่าและส่งกลับอาร์เรย์ของคีย์ทั้งหมดที่มีค่าที่ระบุไว้ในอาร์กิวเมนต์
ตอนนี้เรามาเขียนโค้ดสำหรับฟังก์ชันนี้กัน -
ตัวอย่าง
const obj = {
"name": "Vivek Sharma",
"occupation": "Software Engineer",
"age": 23,
"contacts": [{
"name": "Mukul Sharma",
"occupation": "Software Engineer",
"age": 31,
}, {
"name": "Jay Sharma",
"occupation": "Software Engineer",
"age": 27,
}, {
"name": "Rajan Sharma",
"occupation": "Software Engineer",
"age": 32,
}]
};
const keysOf = function(val, obj = this, res = []){
const keys = Object.keys(obj);
for(let ind = 0; ind < keys.length; ind++){
if(obj[keys[ind]] === val){
res.push(keys[ind]);
}else if(typeof obj[keys[ind]] === 'object' &&
!Array.isArray(obj[keys[ind]])){
keysOf(val, obj[keys[ind]], res);
};
};
return res;
};
Object.prototype.keysOf = keysOf;
console.log(obj.keysOf(23)); ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
['age']