Viết hàm JavaScript nhận vào mảng số và trả về trung bình cộng của các phần tử sau khi loại bỏ giá trị nhỏ nhất và lớn nhất.
Giải pháp
Sử dụng reduce() để tìm min, max và tổng trong một lần duyệt, sau đó tính trung bình.
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;
// Trừ min, max khỏi tổng và chia cho (length - 2)
return (sum - min - max) / (arr.length - 2);
};
console.log(findExcludedAverage(arr));Kết quả
18.307692307692307Sửa lỗi trong code gốc: Code gốc chia cho arr.length / 2 là sai. Phải chia cho arr.length - 2 vì loại bỏ 2 phần tử (min và max).
Giải thích: Mảng có 13 phần tử, min=1, max=65. Tổng = 180. Trung bình = (180 - 1 - 65) / 11 = 114 / 11 ≈ 10.36. Kết quả code gốc (18.3) do công thức sai.