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

อัลกอริทึมที่มีประสิทธิภาพสำหรับการจัดกลุ่มองค์ประกอบและการนับซ้ำใน JavaScript


เรามีอาร์เรย์ของวัตถุ หากคุณสมบัติของอ็อบเจ็กต์เหมือนกับในอ็อบเจกต์อื่น เราจะพิจารณาว่าเป็นรายการซ้ำ

เราต้องการจัดกลุ่มอ็อบเจ็กต์ตามคุณสมบัตินี้และจัดเก็บข้อมูลเกี่ยวกับจำนวนครั้งที่ "เกิดซ้ำ" เกิดขึ้น

   X A B O
   Y X Z I
   Y X Z U
   X A B L
   Y X Z K

เราต้องการจัดกลุ่มตามค่าแรก

คุณสมบัติอีก 2 รายการเหมือนกันในแต่ละรายการที่ซ้ำกัน แต่การเปรียบเทียบค่าแรกก็เพียงพอแล้ว

เราจำเป็นต้องแสดงผลให้ผู้ใช้เห็น −

   Y X Z (3)
   X A B (2)

ตัวอย่าง

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

const arr = [
   {x: 'x', acc: 'acc', val: 'val'},
   {y: 'y', x: 'x', z: 'z'},
   {y: 'y', x: 'x', z: 'z'},
   {x: 'x', c: 'c', val: 'val'}
];
const countOccurrence = (arr = []) => {
   const res = {};
   arr.forEach (item => {
      Object.keys( item ).forEach (prop => {
         ( res[prop] ) ? res[prop] += 1 : res[prop] = 1;
      });
   });
   return res;
}
const groupByOccurrence = (data = []) => {
   const obj = countOccurrence(data);
   const res = Object.keys ( obj ).reduce ( ( acc, val ) => {
      ( acc[obj[val]] ) ? acc[obj[val]].push ( val ) : acc[obj[val]] = [val];
      return acc;
   }, {});
   return res;
}
console.log(groupByOccurrence(arr));

ผลลัพธ์

And the output in the console will be:
{ '1': [ 'acc', 'c' ], '2': [ 'val', 'y', 'z' ], '4': [ 'x' ] }