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

Đối tượng nhóm JSON trong JavaScript

Giả sử, chúng ta có một mảng các đối tượng như thế này -

const arr = [
   { 'name': 'JON', 'flight':100, 'value': 12, type: 'uns' },
   { 'name': 'JON', 'flight':100, 'value': 35, type: 'sch' },
   { 'name': 'BILL', 'flight':200, 'value': 33, type: 'uns' },
   { 'name': 'BILL', 'flight':200, 'value': 45, type: 'sch' }
];

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng các đối tượng như vậy. Hàm sẽ ánh xạ loại bỏ các khóa "giá trị" và "loại" khỏi các đối tượng và thêm các giá trị của chúng dưới dạng các cặp giá trị khóa cho các đối tượng tương ứng.

Do đó, đầu ra cho đầu vào ở trên sẽ giống như thế này -

const output = [
   { 'name': 'JON', 'flight':100, 'uns': 12, 'sch': 35 },
   { 'name': 'BILL', 'flight':200, 'uns': 33, 'sch': 45}
];

Đầu ra

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

const arr = [
   { 'name': 'JON', 'flight':100, 'value': 12, type: 'uns' },
   { 'name': 'JON', 'flight':100, 'value': 35, type: 'sch' },
   { 'name': 'BILL', 'flight':200, 'value': 33, type: 'uns' },
   { 'name': 'BILL', 'flight':200, 'value': 45, type: 'sch' }
];
const groupArray = (arr = []) => {
   const res = arr.reduce(function (hash) {
      return function (r, o) {
         if (!hash[o.name]) {
            hash[o.name] = { name: o.name, flight: o.flight };
            r.push(hash[o.name]);
         }
         hash[o.name][o.type] = (hash[o.name][o.type] || 0) + o.value;
         return r;
      }
   }(Object.create(null)), []);
   return res;
};
console.log(groupArray(arr));

Đầu ra

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

[
   { name: 'JON', flight: 100, uns: 12, sch: 35 },
   { name: 'BILL', flight: 200, uns: 33, sch: 45 }
]