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

จัดกลุ่มอาร์เรย์ด้วยค่าที่เท่ากัน JavaScript


สมมติว่าเรามีอาร์เรย์ของตัวอักษรสตริง / ตัวเลขที่มีค่าที่ซ้ำกันบางอย่างเช่นนี้ -

const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night', 'noon', 'day', 'afternoon', 'day', 'night'];

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

ในตัวอย่างนี้ ผลลัพธ์ควรเป็น −

[
   [ 'day', 3 ],
   [ 'night', 4 ],
   [ 'afternoon', 2 ],
   [ 'noon', 2 ]
]

มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน เราจะใช้ฟังก์ชัน Array.prototype.map() เพื่อสร้างอาร์เรย์ใหม่ จำเป็น และเราจะใช้ Map เพื่อติดตามรายการที่เกิดซ้ำในอาร์เรย์ -

ตัวอย่าง

const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night',
'noon', 'day', 'afternoon', 'day', 'night'];
const groupSimilar = arr => {
   return arr.reduce((acc, val) => {
      const { data, map } = acc;
      const ind = map.get(val);
      if(map.has(val)){
         data[ind][1]++;
      } else {
         map.set(val, data.push([val, 1])-1);
      }
      return { data, map };
   }, {
      data: [],
      map: new Map()
   }).data;
};
console.log(groupSimilar(array));

ผลลัพธ์

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

[ [ 'day', 3 ], [ 'night', 4 ], [ 'afternoon', 2 ], [ 'noon', 2 ] ]