สมมติว่าเรามีอาร์เรย์ของวัตถุที่ซ้อนกันเช่นนี้ −
const arr = [{ id: 1, legs:[{ carrierName:'Pegasus' }] }, { id: 2, legs:[{ carrierName: 'SunExpress' }, { carrierName: 'SunExpress' }] }, { id: 3, legs:[{ carrierName: 'Pegasus' }, { carrierName: 'SunExpress' }] }];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์เช่นอาร์กิวเมนต์แรกและสตริงข้อความค้นหาเป็นอาร์กิวเมนต์ที่สอง
ฟังก์ชันของเราควรกรองอาร์เรย์ให้มีเฉพาะวัตถุที่มีค่าคุณสมบัติ "carrier name" เป็นค่าเดียวกับที่ระบุโดยอาร์กิวเมนต์ที่สอง
ถ้าสำหรับอาร์เรย์ด้านบน อาร์กิวเมนต์ที่สองคือ "Pegasus" จากนั้นผลลัพธ์ควรมีลักษณะดังนี้ −
const output = [{ id: 1, legs:[{ carrierName:'Pegasus' }] }, { id: 3, legs:[{ carrierName: 'Pegasus' }, { carrierName: 'SunExpress' }] }];
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [{ id: 1, legs:[{ carrierName:'Pegasus' }] }, { id: 2, legs:[{ carrierName: 'SunExpress' }, { carrierName: 'SunExpress' }] }, { id: 3, legs:[{ carrierName: 'Pegasus' }, { carrierName: 'SunExpress' }] }]; const keys = ['Pegasus']; const filterByKeys = (arr = [], keys = []) => { const res = arr.filter(function(item) { const thisObj = this; return item.legs.some(leg => { return thisObj[leg.carrierName]; }); }, keys.reduce((acc, val) => { acc[val] = true; return acc; }, Object.create(null))); return res; } console.log(JSON.stringify(filterByKeys(arr, keys), undefined, 4));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[ { "id": 1, "legs": [ { "carrierName": "Pegasus" } ] }, { "id": 3, "legs": [ { "carrierName": "Pegasus" }, { "carrierName": "SunExpress" } ] } ]