Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

แสดง key ของอ็อบเจกต์ซ้อนแบบ Recursive ใน JavaScript

สมมติว่าเรามีอ็อบเจกต์ที่มีอ็อบเจกต์อื่นเป็นค่าคุณสมบัติ ซ้อนกัน 2-3 ระดับ หรือมากกว่า

อ็อบเจกต์ตัวอย่าง

const people = {
  Ram: {
    fullName: 'Ram Kumar',
    details: {
      age: 31,
      isEmployed: true
    }
  },
  Sourav: {
    fullName: 'Sourav Singh',
    details: {
      age: 22,
      isEmployed: false
    }
  },
  Jay: {
    fullName: 'Jay Grewal',
    details: {
      age: 26,
      isEmployed: true
    }
  }
}

หน้าที่คือเขียนฟังก์ชันรับอ็อบเจกต์นี้และสตริง ค้นหาทั่วอ็อบเจกต์หา key ที่ตรงกับสตริง คืนอาร์เรย์ที่มีค่าของ key ที่ตรงกันทั้งหมด

เรียกฟังก์ชันว่า recursiveSearch() Recursion เหมาะสมที่สุดสำหรับการซ้อนนี้

โค้ดเต็มของฟังก์ชัน recursiveSearch()

ตัวอย่าง

const people = {
  Ram: {
    fullName: 'Ram Kumar',
    details: {
      age: 31,
      isEmployed: true
    }
  },
  Sourav: {
    fullName: 'Sourav Singh',
    details: {
      age: 22,
      isEmployed: false
    }
  },
  Jay: {
    fullName: 'Jay Grewal',
    details: {
      age: 26,
      isEmployed: true
    }
  }
}
const recursiveSearch = (obj, searchKey, results = []) => {
  const r = results;
  Object.keys(obj).forEach(key => {
    const value = obj[key];
    if(key === searchKey && typeof value !== 'object'){
      r.push(value);
    }else if(typeof value === 'object'){
      recursiveSearch(value, searchKey, r);
    }
  });
  return r;
};
console.log(recursiveSearch(people, 'age'));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

[ 31, 22, 26 ]

ในฟังก์ชันข้างต้น เราวนลูปผ่านอ็อบเจกต์หลัก และเมื่อเจอการซ้อน เรา recursive วนลูปผ่านซับอ็อบเจกต์ ค้นหา key ที่ต้องการ หากเจอ key ที่ต้องการ จะบันทึกค่าของมันทันทีในอาร์เรย์ results และเมื่อวนลูปเสร็จ จะคืนอาร์เรย์ results ที่มีค่าที่ต้องการ

ความซับซ้อนด้านเวลาของฟังก์ชันนี้คือ O(mn) โดย m คือจำนวนอ็อบเจกต์ลูกภายในอ็อบเจกต์หลัก และ n คือระดับการซ้อนที่ลึกที่สุด