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

Liệt kê đệ quy các khóa đối tượng lồng nhau JavaScript

Giả sử, 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 để lấy 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à -

Ví dụ

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

Đầu ra

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

[ 31, 22, 26 ]

Trong hàm trên, 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 phải anesting, 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, 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.