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

คำนวณค่าเฉลี่ยจากข้อมูล JSON ตามตัวกรองหลายตัว JavaScript


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

const arr =[ { "SupplierName" :"John", "Category " :"A", "Points" :3 }, { "SupplierName" :"John", "Category " :"A", "Points " :11 }, { "SupplierName" :"John", "Category " :"A", "Points" :undefined }, { "SupplierName" :"John", "Category " :"B", "Points" :2 }, { "SupplierName" :"John", "Category " :"B", "Points" :6 }, { "SupplierName" :"Praveen", "Category " :"A", "Points" :3 } , { "SupplierName" :"Praveen", "Category " :"A", "Points" :7 }];

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว

ฟังก์ชันควรทำสิ่งต่อไปนี้ -

  • จัดกลุ่มซัพพลายเออร์ที่ทำซ้ำเป็นออบเจ็กต์ที่แยกจากกันเป็นหนึ่งเดียว (โดยการทำซ้ำ เราหมายถึงออบเจ็กต์ที่มีช่อง "SupplierName" และ "Category")
  • รวมคะแนนเข้าด้วยกัน
  • เพิ่มช่อง "ค่าเฉลี่ย" ใหม่ให้กับแต่ละออบเจ็กต์ ซึ่งประกอบด้วยคะแนนเฉลี่ยของซัพพลายเออร์รายนั้น

ดังนั้นสุดท้ายผลลัพธ์ควรมีลักษณะดังนี้ −

const output =[ { "SupplierName" :"John", "Category " :"A", "Points" :14, "Average" :7 }, { "SupplierName" :"John", "Category " :"B", "Points" :8, "Average" :4 }, { "SupplierName" :"Praveen", "Category " :"A", "Points" :10, "Average" :5 }]; 

ตัวอย่าง

const arr =[ { "SupplierName" :"John", "Category " :"A", "Points" :3 }, { "SupplierName" :"John", "Category " :"A", "Points " :11 }, { "SupplierName" :"John", "Category " :"A", "Points" :undefined }, { "SupplierName" :"John", "Category " :"B", "Points" :2 }, { "SupplierName" :"John", "Category " :"B", "Points" :6 }, { "SupplierName" :"Praveen", "Category " :"A", "Points" :3 } , { "SupplierName" :"Praveen", "Category " :"A", "Points" :7 }];const groupAndAverage =(arr =[]) => { const groups =arr.reduce((acc, obj) => { ชื่อ const =obj.SupplierName + obj.Category; if (acc [name]) { if (obj.Points) (acc [name].Points +=obj.Points) &&++acc[name].Average; } else { acc[name] =obj; acc[name].Average =1; // ใช้แอตทริบิวต์ 'Average' เป็นตัวนับรายการ (ในระยะแรก) }; ส่งคืน acc; }, {}); // รับ "ค่าเฉลี่ยของคะแนน" const res =Object.keys(groups).map(name => { groups[name].Average =Math.round(groups[name].Points/groups[name].Average); กลับกลุ่ม[ชื่อ]; }); ผลตอบแทน;}; console.log(JSON.stringify(groupAndAverage(arr), undefined, 4));

ผลลัพธ์

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

[ { "SupplierName":"John", "Category ":"A", "Points":22, "Average":6 }, { "SupplierName":"Praveen", "Category ":"A" , "คะแนน":10, "ค่าเฉลี่ย":5 }]