Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm ký tự xuất hiện nhiều thứ hai trong mảng - JavaScript

Viết hàm JavaScript tìm phần tử xuất hiện với tần suất nhiều thứ hai trong mảng.

Ví dụ

const arr = [1, 34, 4, 3, 2, 1, 4, 6, 4, 6, 5, 3, 6, 6];
// Tần suất: 6→4 lần, 4→3 lần, 1→2 lần, 3→2 lần, 34→1, 2→1, 5→1
// Nhiều nhất: 6 (4 lần)
// Thứ hai: 4 (3 lần)

Giải pháp

Dùng Map đếm tần suất, chuyển thành mảng, sắp xếp giảm dần theo tần suất, lấy phần tử index 1.

const arr = [1, 34, 4, 3, 2, 1, 4, 6, 4, 6, 5, 3, 6, 6];

const secondMostFrequent = arr => {
  const map = arr.reduce((acc, val) => {
    acc.set(val, (acc.get(val) || 0) + 1);
    return acc;
  }, new Map());

  const frequencyArray = Array.from(map.entries());
  
  // Sắp xếp giảm dần theo tần suất
  frequencyArray.sort((a, b) => b[1] - a[1]);
  
  // Trả về giá trị (key) của phần tử thứ 2
  return frequencyArray[1]?.[0];
};

console.log(secondMostFrequent(arr));

Kết quả

4

Cải tiến: Dùng acc.get(val) || 0 gọn hơn so với if/else. Thêm optional chaining ?. để an toàn khi mảng ít hơn 2 phần tử duy nhất.