Chúng tôi có một mảng số trong JavaScript chứa các số theo thứ tự không được sắp xếp. Công việc của chúng ta là viết một hàm nhận mảng số này và trả về mảng gồm hai phần tử, hai phần tử trên cùng của mảng (hai phần tử lớn nhất của mảng).
Chúng ta phải thực hiện điều này trong một lần vượt qua, tức là chúng ta cần thực thi phương thức này trong thời gian tuyến tính như bằng cách chỉ sử dụng một vòng lặp for hoặc nếu chúng ta sử dụng hàm ES6, chúng ta phải đảm bảo chỉ sử dụng một và một lần và tránh lồng các phương thức làm tăng thời gian phức tạp.
Vì vậy, bây giờ hãy viết mã bằng phương thức 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));
Đầu ra
Đầu ra trong bảng điều khiển sẽ là -
[ 234, 87 ]