Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ตัวกรองคอลเลกชันที่ซ้อนกันด้วย JavaScript


สมมติว่าเรามีอาร์เรย์ของวัตถุที่ซ้อนกันเช่นนี้ −

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"
         }
      ]
   }
]