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

Đệ quy phẳng một đối tượng JavaScript

Chúng tôi được yêu cầu viết một hàm thực hiện chuyển đổi sau -

Nếu đối tượng đầu vào là -

const input = {
   a: 0,
   b: {x: {y: 1, z: 2}},
   c: 3
};

Sau đó, đầu ra của hàm phải là -

const output = {
   a: 0,
   'b.x.y': 1,
   'b.x.z': 2,
   c: 3
}

Về cơ bản chúng ta phải viết một hàm làm phẳng một đối tượng lồng nhau. Sẽ thực hiện điều này thông qua đệ quy và mã để thực hiện việc này sẽ là -

Ví dụ

const obj = {
   a: 1,
   b: {x: {y: 1, z: 2}},
   c: 3
};
const obj1 = {
   a: 0,
   b: 0,
   c: 0
};
const object = { a: 0, b: { x: { y: 1, z: 2 } }, c: 3 };
const stringifyKeys = (obj, str = '', fresh = {}) => {
   const keys = Object.keys(obj);
   for(let i = 0; i < keys.length; i++){
      if(typeof obj[keys[i]] === "object" && !Array.isArray(obj[keys[i]])
      && obj[keys[i]]){
         stringifyKeys(obj[keys[i]], str+`${keys[i]}.`, fresh);
      }else{
         fresh[str+keys[i]] = obj[keys[i]];
      };
   }
   return fresh;
};
console.log(stringifyKeys(obj));
console.log(stringifyKeys(object));
console.log(stringifyKeys(obj1));

Đầu ra

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

{ a: 1, 'b.x.y': 1, 'b.x.z': 2, c: 3 }
{ a: 0, 'b.x.y': 1, 'b.x.z': 2, c: 3 }
{ a: 0, b: 0, c: 0 }