Computer >> Máy Tính >  >> Lập trình >> Javascript

Sắp xếp mảng theo tần suất tăng dần của các phần tử trong JavaScript

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng các ký tự làm đối số đầu tiên và duy nhất.

Mảng có khả năng chứa nhiều giá trị lặp lại. Hàm của chúng ta nên sắp xếp mảng sao cho các giá trị là duy nhất hoặc có tần suất ít nhất được đặt trước các giá trị có nhiều nhất.

Ví dụ -

Nếu mảng đầu vào là -

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

Sau đó, mảng đầu ra phải là -

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

Ví dụ

Sau đây là mã -

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));

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

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