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

การแยกอาร์เรย์ตามค่าแรก - JavaScript


สมมติว่าเรามีอาร์เรย์ของตัวเลขแบบนี้ -

const arr = [[1, 45], [1, 34], [1, 49], [2, 34], [4, 78], [2, 67], [4, 65]];

แต่ละ subarray ถูกผูกไว้กับสององค์ประกอบอย่างเคร่งครัด เราจำเป็นต้องเขียนฟังก์ชันที่สร้างอาร์เรย์ใหม่ โดยที่องค์ประกอบที่สองทั้งหมดของอาร์เรย์ย่อยที่มีค่าแรกเหมือนกันจะถูกจัดกลุ่มไว้ด้วยกัน

ดังนั้น สำหรับอาร์เรย์ด้านบน ผลลัพธ์ควรมีลักษณะดังนี้ −

const output = [
   [45, 34, 49],
   [34, 67],
   [78, 65]
];

เราสามารถใช้ประโยชน์จากวิธีการ Array.prototype.reduce() ที่ช่วย Map() เพื่อสร้างอาร์เรย์ที่ต้องการได้

ตัวอย่าง

ต่อไปนี้เป็นรหัส -

const arr = [[1, 45], [1, 34], [1, 49], [2, 34], [4, 78], [2, 67], [4, 65]];
const constructSimilarArray = (arr = []) => {
   const creds = arr.reduce((acc, val) => {
      const { map, res } = acc;
      if(!map.has(val[0])){
         map.set(val[0], res.push([val[1]]) - 1);
      }else{
         res[map.get(val[0])].push(val[1]);
      };
      return { map, res };
   }, {
      map: new Map(),
      res: []
   });
   return creds.res;
};
console.log(constructSimilarArray(arr));

ผลลัพธ์

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ในคอนโซล -

[ [ 45, 34, 49 ], [ 34, 67 ], [ 78, 65 ] ]