ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่อยู่บนโปรโตไทพ์ออบเจกต์ของคลาส Array ฟังก์ชันควรรับฟังก์ชัน callback เป็นอาร์กิวเมนต์เดียว ฟังก์ชัน callback นี้ควรถูกเรียกสำหรับแต่ละสมาชิกของอาร์เรย์
และ callback ควรรับสองอาร์กิวเมนต์ คือสมาชิกที่ตรงกันและดัชนีของมัน ถ้า callback คืนค่า true เราควรรวมสมาชิกนั้นในอาร์เรย์ผลลัพธ์ มิฉะนั้นตัดออก
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const arr = [5, 3, 6, 2, 7, -4, 8, 10];
const isEven = num => num % 2 === 0;
Array.prototype.customFilter = function(callback) {
const res = [];
for (let i = 0; i < this.length; i++) {
const el = this[i];
if (callback(el, i)) {
res.push(el);
}
}
return res;
};
console.log(arr.customFilter(isEven));
ผลลัพธ์
[ 6, 2, -4, 8, 10 ]
คำอธิบายเพิ่มเติม
Polyfill สำหรับ Array.prototype.filter() รับ callback(element, index) คืน true=keep false=discard ไม่แนะนำให้ monkey patch prototype ใน production ใช้ standalone function หรือ library