โจทย์
ลบ string ที่ขึ้นต้นด้วยตัวอักษรเดียวกัน ทิ้งไว้แค่ตัวแรก
Input: ['Apple', 'Jack', 'Army', 'Car', 'Jason']
Output: ['Apple', 'Jack', 'Car'] (ลบ Army เนื่องจากขึ้นต้น A เช่น Apple, ลบ Jason เนื่องจากขึ้นต้น J เช่น Jack)
ตัวอย่างโค้ด
const arr = ['Apple', 'Jack', 'Army', 'Car', 'Jason'];
const delelteSameLetterWord = arr => {
const map = new Map();
arr.forEach((el, ind) => {
if(map.has(el[0])){
arr.splice(ind, 1);
}else{
map.set(el[0], true);
};
});
};
delelteSameLetterWord(arr);
console.log(arr);
ผลลัพธ์
[ 'Apple', 'Jack', 'Car' ]
คำอธิบาย
ใช้ Map เก็บตัวอักษรแรกที่เจอแล้วforEach วนลูปพร้อม index
ถ้า map.has(el[0]) (ตัวอักษรแรกซ้ำ) → splice(ind, 1) ลบ element นั้นออก
ไม่ซ้ำ → map.set(el[0], true) บันทึกไว้
หมายเหตุ: splice ขณะ forEach อาจข้าม index ได้ ควรใช้ filter แทน