ฟังก์ชันนี้คืนอาร์เรย์ย่อยที่ประกอบด้วยสมาชิกที่มีค่ามากกว่าสมาชิกทุกตัวทางขวาของมัน (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 ในอาร์เรย์ การวิเคราะห์หุ้น/ราคา การประมวลผลสัญญาณ