Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm nạp các khóa đối tượng bằng cách sử dụng đệ quy trong JavaScript

Chúng ta có một đối tượng với các đối tượng khác là giá trị thuộc tính của nó, nó được lồng vào 2-3 cấp hoặc thậm chí nhiều hơn.

Đây là đối tượng mẫu -

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
      }
   }
}

Công việc của chúng ta là viết một hàm chấp nhận đối tượng này và một chuỗi, tìm kiếm toàn bộ đối tượng cho chuỗi đó làm khóa và trả về một mảng chứa giá trị của tất cả các khóa khớp với chuỗi.

Hãy gọi hàm recursiveSearch (), đệ quy sẽ là cách thích hợp nhất để giải quyết tình huống này, dựa trên việc lồng vào nhau.

Vì vậy, mã đầy đủ cho hàm này recursiveSearch () sẽ là -

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'));

Trong hàm này, trước hết chúng ta lặp qua đối tượng chính và bất cứ khi nào chúng ta gặp một lồng nhau, chúng ta lặp lại đệ quy qua tìm kiếm đối tượng phụ để tìm khóa mong muốn, nếu chúng tôi tìm thấy khóa mong muốn, chúng tôi ngay lập tức ghi lại giá trị của nó trong mảng kết quả và tại cuối cùng khi chúng tôi hoàn thành lặp, chúng tôi trả về mảng kết quả chứa các giá trị mong muốn.

Độ phức tạp về thời gian của hàm này là O (mn), trong đó số lượng đối tượng con bên trong đối tượng chính và m là mức lồng ghép sâu nhất.

Đầu ra trong bảng điều khiển cho mã này sẽ là -

[ 31, 22, 26 ]