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

JavaScript ในการกรองอาเรย์ที่เชื่อมโยงกับอาร์เรย์อื่น


สมมุติว่าเรามีอ็อบเจ็กต์สองอาร์เรย์แบบนี้ -

const data = [
   {"XD_A":"XDL","XD_B_1":"38","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"51","XD_B_2":"PB"},
   {"XD_A":"XDL","XD_B_1":"58","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"},
   {"XD_A":"XDL","XD_B_1":"76","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"}
];
const filters =[{"XD_A":"XDR"},{"XD_B_1":"38"}];

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์สองอาร์เรย์เป็นอาร์กิวเมนต์ที่หนึ่งและที่สองตามลำดับ

จากนั้นฟังก์ชันควรเลือกเฉพาะออบเจ็กต์จากอาร์เรย์แรก (อาร์เรย์ข้อมูล) ที่มีคู่คีย์-ค่าทั้งหมดที่มีอยู่ในอาร์เรย์ที่สอง (อาร์เรย์ตัวกรอง)

และฟังก์ชันควรผลักวัตถุเหล่านั้นทั้งหมดเข้าไปในวัตถุใหม่และส่งคืนวัตถุนั้น

สำหรับอาร์เรย์ข้างต้น อาร์เรย์ที่ส่งคืนควรมีสองวัตถุเช่นนี้ -

const output = [
   {"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"}
];

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const data = [
   {"XD_A":"XDL","XD_B_1":"38","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"51","XD_B_2":"PB"},
   {"XD_A":"XDL","XD_B_1":"58","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"},
   {"XD_A":"XDL","XD_B_1":"76","XD_B_2":"PB"},
   {"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"}
];
const filters =[{"XD_A":"XDR"},{"XD_B_1":"38"}];
const filter = (data, filters) => {
   return data.filter(e => {
      try{
         filters.forEach(o => {
            Object.keys(o).forEach(key => {
               if(e[key] !== o[key]) throw new 1;
            });
         });
         return true;
      }
      catch(e){
         return false;
      }
   });
}
console.info(filter(data, filters));

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น -

[
   { XD_A: 'XDR', XD_B_1: '38', XD_B_2: 'PB' },
   { XD_A: 'XDR', XD_B_1: '38', XD_B_2: 'PB' }
]