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

Chuyển đổi mảng JSON thành json bình thường trong JavaScript

Giả sử, chúng ta có một mảng JSON với các đối tượng cặp khóa / giá trị như thế này -

const arr = [{
   "key": "name",
   "value": "john"
},
{
   "key": "number",
   "value": "1234"
},
{
   "key": "price",
   "value": [{
      "item": [{
         "item": [{
            "key": "quantity",
            "value": "20"
         },
         {
            "key": "price",
            "value": "200"
         }]
      }]
   }]
}];

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng như vậy.

Hàm phải chuẩn bị một mảng mới trong đó dữ liệu được liệt kê đơn giản dựa trên giá trị khóa thay vì cấu trúc phức tạp này.

Do đó, đối với mảng trên, đầu ra sẽ như thế này -

const output = {
   "name": "john",
   "number": "1234",
   "price": {
      "quantity": "20",
      "price": "200"
   }
};

Ví dụ

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

const arr = [{
   "key": "name",
   "value": "john"
},
{
   "key": "number",
   "value": "1234"
},
{
   "key": "price",
   "value": [{
      "item": [{
         "item": [{
            "key": "quantity",
            "value": "20"
         },
         {
            "key": "price",
            "value": "200"
         }]
      }]
   }]
}];
const simplify = (arr = []) => {
   const res = {};
   const recursiveEmbed = function(el){
      if ('item' in el) {
         el.item.forEach(recursiveEmbed, this);
         return;
      };
      if (Array.isArray(el.value)) {
         this[el.key] = {};
         el.value.forEach(recursiveEmbed, this[el.key]);
         return;
      };
      this[el.key] = el.value;
   };
   arr.forEach(recursiveEmbed, res);
   return res;
};
console.log(simplify(arr));

Đầu ra

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

{
   name: 'john',
   number: '1234',
   price: { quantity: '20', price: '200' }
}