Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

วัตถุกลุ่ม JSON ใน JavaScript


สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -

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' }
];

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของอ็อบเจ็กต์ดังกล่าว ฟังก์ชันควรแมปลบคีย์ 'value' และ 'type' ออกจากออบเจ็กต์และเพิ่มค่าเป็นคู่ค่าคีย์ไปยังออบเจ็กต์ที่เกี่ยวข้อง

ดังนั้นเอาต์พุตของอินพุตด้านบนควรมีลักษณะดังนี้ −

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

ผลลัพธ์

รหัสสำหรับสิ่งนี้จะเป็น −

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

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น −

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