ปัญหา
เราต้องเขียนฟังก์ชัน 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' ]