Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

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

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

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

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

ดังนั้น สำหรับตัวอย่างนี้ ผลลัพธ์ควรเป็น:

[
  ['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] ]