เรามีอาร์เรย์ของตัวเลขใน 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 ]