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

Sắp xếp mảng dựa trên tần suất ngày càng tăng của các phần tử trong JavaScript

Vấn đề

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

Mảng arr, có thể chứa một số bản sao. Hàm của chúng ta có nhiệm vụ sắp xếp mảng theo cách sao cho các phần tử xuất hiện với số lần ít nhất được đặt trước là các phần tử có tần suất tăng dần.

Nếu hai phần tử xuất hiện cùng một số lần trong mảng thì chúng phải được đặt theo thứ tự tăng dần.

Ví dụ:nếu đầu vào của hàm là

Đầu vào

const arr = [5, 4, 5, 4, 2, 1, 12];

Đầu ra

const output = [1, 2, 12, 4, 4, 5, 5];

Giải thích đầu ra

Các số 1, 2 và 12 đều xuất hiện một lần do đó được sắp xếp theo thứ tự tăng dần và sau đó 4 và 5 đều xuất hiện hai lần.

Ví dụ

Sau đây là mã -

const arr = [5, 4, 5, 4, 2, 1, 12];
const sortByAppearance = (arr = []) => {
   arr.sort((a, b) => a - b);
   const res = [];
   const searched = {};
   const countAppearance = (list, target) => {
      searched[target] = true;
      let count = 0;
      let index = list.indexOf(target);
      while(index !== -1){
         count++;
         list.splice(index, 1);
         index = list.indexOf(target);
      };
      return count;
   };

   const map = [];
   arr.forEach(el => {
      if(!searched.hasOwnProperty(el)){
         map.push([el, countAppearance(arr.slice(), el)]);
      };
   });
   map.sort((a, b) => a[1] - b[1]);

   map.forEach(([num, freq]) => {
      while(freq){
         res.push(num);
         freq--;
      }
   });
   return res;
};
console.log(sortByAppearance(arr));

Đầu ra

[1, 2, 12, 4, 4, 5, 5]