สมมติว่าเรามีอาร์เรย์ของอ็อบเจกต์ดังนี้:
const arr = [
{ country: "canada", count: 2 },
{ country: "jamaica", count: 2 },
{ country: "russia", count: 1 },
{ country: "india", count: 3 },
{ country: "spain", count: 2 },
{ country: "portugal", count: 1 },
{ country: "italy", count: 1 }
];
เราต้องเขียนฟังก์ชันที่รับอาร์เรย์นี้ map ผ่านมันและคืนค่าอาร์เรย์ของสตริงที่มีชื่อประเทศซ้ำตามจำนวน "count" ของแต่ละอ็อบเจกต์
ดังนั้น ผลลัพธ์ของฟังก์ชันสำหรับอ็อบเจกต์นี้ควรเป็น:
['canada', 'canada', 'jamaica', 'jamaica', 'russia', 'india', 'india', 'india', 'spain', 'spain', 'portugal', 'italy']
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน เราจะใช้เมธอด Array.prototype.reduce() ที่นี่:
ตัวอย่างโค้ด
const arr = [
{ country: "canada", count: 2 },
{ country: "jamaica", count: 2 },
{ country: "russia", count: 1 },
{ country: "india", count: 3 },
{ country: "spain", count: 2 },
{ country: "portugal", count: 1 },
{ country: "italy", count: 1 }
];
const repeatCount = (arr) => {
return arr.reduce((acc, val) => {
let { count, country } = val;
while (count--) {
acc.push(country);
}
return acc;
}, []);
};
console.log(repeatCount(arr));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[ 'canada', 'canada', 'jamaica', 'jamaica', 'russia', 'india', 'india', 'india', 'spain', 'spain', 'portugal', 'italy' ]