โจทย์
หาค่าเฉลี่ยของ array elements ยกเว้นค่ามากที่สุดและน้อยที่สุด
ตัวอย่างโค้ด
const arr = [1, 4, 5, 3, 5, 6, 12, 5, 65, 3, 2, 65, 9];
const findExcludedAverage = arr => {
const creds = arr.reduce((acc, val) => {
let { min, max, sum } = acc;
sum += val;
if(val > max){ max = val; };
if(val < min){ min = val; };
return { min, max, sum };
}, { min: Infinity, max: -Infinity, sum: 0 });
const { max, min, sum } = creds;
return (sum - min - max) / (arr.length / 2);
};
console.log(findExcludedAverage(arr));
ผลลัพธ์
18.307692307692307
คำอธิบาย
reduce หา min, max, sum พร้อมกันใน 1 pass
min เริ่ม Infinity, max เริ่ม -Infinity
ลบ min และ max ออกจาก sum แล้วหารจำนวน elements ที่เหลือ
หมายเหตุ: สูตร (arr.length / 2) ผิด ควรเป็น (arr.length - 2) (ลบ 2 ตัวที่ exclude) ผลลัพธ์ที่ถูกต้องควรเป็น (sum - min - max) / (arr.length - 2)