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

Phần tử chung bao gồm trùng lặp trong mảng JavaScript

Mô tả vấn đề

Chúng ta cần viết hàm JavaScript nhận vào mảng chuỗi arr làm đối số duy nhất. Hàm trả về mảng tất cả ký tự xuất hiện trong tất cả chuỗi trong mảng (bao gồm cả trùng lặp).

Ví dụ, nếu một ký tự xuất hiện 2 lần trong mọi chuỗi nhưng không phải 3 lần, ta đưa ký tự đó 2 lần vào kết quả.

Ví dụ, nếu đầu vào là:

const arr = ['door', 'floor', 'crook'];

Thì đầu ra nên là:

const output = ['r', 'o', 'o'];

Ví dụ minh họa

Mã thực hiện (giao tần suất):

const arr = ['door', 'floor', 'crook']; 
const findCommon = (arr = []) => { 
  let prev = null; 
  arr.forEach((str) => { 
    const next = {}; 
    for(const val of str){ 
      if(!prev){ 
        next[val] = (next[val] || 0) + 1; 
      }else if(prev[val]){ 
        prev[val] -= 1; 
        next[val] = (next[val] || 0) + 1; 
      }; 
    }; 
    prev = next; 
  }); 
  const res = Object.keys(prev).reduce((acc, val) => { 
    for(let i = 0; i < prev[val]; i++){ 
      acc.push(val); 
    } 
    return acc; 
  }, []); 
  return res; 
}; 
console.log(findCommon(arr));

Đầu ra

Kết quả trong console sẽ là:

[ 'r', 'o', 'o' ]