เรามีอาร์เรย์ของตัวเลขใน JavaScript ที่มีตัวเลขในลำดับที่ไม่เรียงลำดับ งานของเราคือเขียนฟังก์ชันที่รับอาร์เรย์ของตัวเลขนี้และส่งกลับอาร์เรย์ของสององค์ประกอบ ซึ่งเป็นองค์ประกอบสองอันดับแรกของอาร์เรย์ (สององค์ประกอบที่ยิ่งใหญ่ที่สุดของอาร์เรย์)
เราต้องทำสิ่งนี้ในครั้งเดียว นั่นคือ เราต้องใช้วิธีนี้ในเวลาเชิงเส้นเช่นโดยใช้เพียงอันเดียวสำหรับลูปหรือถ้าเราใช้ฟังก์ชัน ES6 เราต้องใช้เพียงครั้งเดียวและหลีกเลี่ยงการซ้อนวิธีที่จะเพิ่มเวลา ความซับซ้อน
ตอนนี้เรามาเขียนโค้ดโดยใช้เมธอด Array.prototype.reduce() -
ตัวอย่าง
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)); ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
[ 234, 87 ]