Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

คืนค่า Top 2 องค์ประกอบจากอาร์เรย์ใน JavaScript

เรามีอาร์เรย์ของตัวเลขใน JavaScript ที่มีตัวเลขเรียงไม่เป็นลำดับ หน้าที่ของเราคือเขียนฟังก์ชันที่รับอาร์เรย์ตัวเลขนี้และคืนค่าอาร์เรย์สององค์ประกอบ คือ top 2 ของอาร์เรย์ (สองตัวที่มากที่สุด)

เราต้องทำในหนึ่งผ่าน (one pass) คือ ต้องทำใน linear time เช่นใช้ for loop เพียงลูปเดียว หรือถ้าใช้ ES6 function ต้องแน่ใจว่าใช้แค่ตัวเดียวครั้งเดียว และหลีกเลี่ยงการซ้อนเมธอดที่เพิ่ม time complexity

ตอนนี้มาเขียนโค้ดด้วยเมธอด 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]