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

Làm cách nào để chuyển đổi các khóa đối tượng trong dấu ngoặc vuông thành đối tượng lồng nhau trong JavaScript?

Chúng tôi biết rằng có hai cách để chúng tôi có thể truy cập các khóa lồng nhau trong một Đối tượng trong JavaScript.

Ví dụ:lấy đối tượng này -

const obj = {
   object: {
      foo: {
         bar: {
            ya: 100
         }
      }
   }
};

Nếu chúng tôi cần truy cập hoặc cập nhật thuộc tính lồng nhau 'ya', chúng tôi có thể truy cập nó như -

Cách 1 -

obj['object']['foo']['bar']['ya']

hoặc Cách 2 -

obj.object.foo.bar.ya

Cả hai cách này đều dẫn chúng ta đến cùng một đích.

Chúng tôi được yêu cầu viết một hàm JavaScript nhận đường dẫn đến khóa lồng nhau dưới dạng một chuỗi như được mô tả trong Cách 1 và chuyển nó thành ký hiệu được mô tả trong Cách 2

Ví dụ

Mã cho điều này sẽ là -

const obj = { "object[foo][bar][ya]": 100 };
const constructDotNotation = obj => {
   const keys = Object.keys(obj)[0].split('[').map(el => {
      return el.replace(']', '');
   });
   let res = {};
   keys.reverse().forEach(key => {
      if (Object.keys(res).length === 0){
         res[key] = obj[Object.keys(obj)[0]];
      }else{
         const temp = {};
         temp[key] = res;
         res = temp;
      };
   });
   return res;
};
console.log(JSON.stringify(constructDotNotation(obj), undefined, 4));

Đầu ra

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

{
   "object": {
      "foo": {
         "bar": {
            "ya": 100
         }
      }
   }
}