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

ดึงคีย์ของออบเจกต์ด้วย Recursion ใน 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
    }
  }
}

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

เราจะเรียกฟังก์ชันว่า 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'));

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

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

ผลลัพธ์ในคอนโซลสำหรับโค้ดนี้จะเป็น:

[ 31, 22, 26 ]