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

หาตัวอักษรที่ซ้ำในทุกสตริงของอาร์เรย์ (รวมซ้ำ) ใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริง arr เป็นอาร์กิวเมนต์เดียว

ฟังก์ชันควรคืนอาร์เรย์ของตัวอักษรทั้งหมดที่ปรากฏในทุกสตริงภายในอาร์เรย์ arr (รวมตัวซ้ำด้วย)

ตัวอย่างเช่น ถ้าตัวอักษรปรากฏ 2 ครั้งในทุกสตริง แต่ไม่ใช่ 3 ครั้ง เราต้องรวมตัวอักษรนั้น 2 ครั้งในคำตอบสุดท้าย

ตัวอย่างเช่น หากอินพุตคือ

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

ผลลัพธ์ควรเป็น

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

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

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

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

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