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

การจัดเรียงอาร์เรย์ตามความถี่ของสมาชิกจากน้อยไปมากใน JavaScript

บทความนี้สาธิตการจัดเรียงอาร์เรย์ให้สมาชิกที่มีความถี่น้อย (หรือ unique) อยู่หน้า และความถี่มากอยู่หลัง

ตัวอย่าง

input: [4, 7, 3, 5, 5, 4, 7, 9, 2, 1, 5, 7, 5, 5, 9]
output: [3, 2, 1, 9, 9, 4, 4, 7, 7, 7, 5, 5, 5, 5, 5]

ตัวอย่างโค้ด

const arr = [4, 7, 3, 5, 5, 4, 7, 9, 2, 1, 5, 7, 5, 5, 9];

const sortByNumbers = (arr = []) => {
  const map = {};
  const res = [];
  for (let i = 0; i < arr.length; i++) {
    map[arr[i]] = map[arr[i]] || [0];
    map[arr[i]][0]++;
    map[arr[i]][1] = arr[i];
  }
  const sorted = Object.values(map).sort((a, b) => {
    if (a[0] === b[0]) {
      return b[1] - a[1];
    }
    return a[0] - b[0];
  });
  for (let i = 0; i < sorted.length; i++) {
    const [freq, num] = sorted[i];
    for (let j = 0; j < freq; j++) {
      res.push(num);
    }
  }
  return res;
};

console.log(sortByNumbers(arr));

ผลลัพธ์

[3, 2, 1, 9, 9, 4, 4, 7, 7, 7, 5, 5, 5, 5, 5]

คำอธิบาย

นับความถี่ใน map: key = ค่า, value = [frequency, value]

เรียงตาม frequency น้อยไปมาก หากเท่ากัน เรียงตามค่าตัวเลขมากไปน้อย (b[1] - a[1])

ขยายกลับเป็นอาร์เรย์ตามความถี่