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

การหาสมาชิกที่มากกว่าสมาชิกทั้งหมดทางขวา - JavaScript

ฟังก์ชันนี้คืนอาร์เรย์ย่อยที่ประกอบด้วยสมาชิกที่มีค่ามากกว่าสมาชิกทุกตัวทางขวาของมัน (leader elements)

ตัวอย่าง

// Input: [12, 45, 6, 4, 23, 23, 21, 1]
// Output: [1, 21, 23, 45]
// คำอธิบาย: 1 มากกว่าทางขวา(ไม่มี), 21>1, 23>21, 45>23

ตัวอย่างโค้ด

const arr = [12, 45, 6, 4, 23, 23, 21, 1];

const largerThanRight = (arr = []) => {
  const creds = arr.reduceRight((acc, val) => {
    let { largest, res } = acc;
    if (val > largest) {
      res.push(val);
      largest = val;
    }
    return { largest, res };
  }, {
    largest: -Infinity,
    res: []
  });
  return creds.res;
};

console.log(largerThanRight(arr));

เทคนิคสำคัญ: reduceRight

  • ประมวลผลจากขวาไปซ้าย (last to first)
  • ตัวแปร largest เก็บค่าสูงสุดที่เจอทางขวา
  • ถ้าค่าปัจจุบัน > largest → เป็น leader → push เข้าผลลัพธ์
  • ผลลัพธ์อยู่ในลำดับขวาไปซ้าย (อาจต้อง reverse)

ผลลัพธ์

[ 1, 21, 23, 45 ]

ประยุกต์ใช้: การหา leaders ในอาร์เรย์ การวิเคราะห์หุ้น/ราคา การประมวลผลสัญญาณ