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

map() อาร์เรย์ของอ็อบเจกต์เป็นอาร์เรย์ใหม่ตามค่า property อื่นด้วย JavaScript

สมมติว่าเรามีอาร์เรย์ของอ็อบเจกต์ดังนี้:

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'
]