Cho mảng số chưa sắp xếp. Viết hàm trả về mảng 2 phần tử lớn nhất (top 2). Yêu cầu: một lần duyệt (linear time), dùng một vòng lặp hoặc một ES6 method duy nhất.
Sử dụng Array.prototype.reduce():
Ví dụ
const arr = [23, 65, 67, 23, 2, 6, 87, 23, 45, 65, 3, 234, 3];const topTwo = arr => { if (arr.length < 2) return false; return arr.reduce((acc, val) => { if (val > acc[0]) { let t = acc[0]; acc[0] = val; acc[1] = t; } else if (val > acc[1]) { acc[1] = val; } return acc; }, [-Infinity, -Infinity]);};console.log(topTwo(arr));Kết quả
Đầu ra trong console sẽ là:
[ 234, 87 ]