สมมติว่าเราต้องเขียนฟังก์ชัน classifyArray() ที่รับอาร์เรย์ที่มีชนิดข้อมูลหลากหลาย และคืนค่า Map() ที่จัดกลุ่มองค์ประกอบตามชนิดข้อมูลของพวกมัน
ตัวอย่างเช่น:
// หากอาร์เรย์อินพุตคือ:
const arr = ['class', 2, [7, 8, 9], {"name": "Michael"}, Symbol('foo'), true, false, 'name', 6];
// Map ที่ควรได้:
Map(5) {
'string' => ['class', 'name'],
'number' => [2, 6],
'object' => [[7, 8, 9], { name: 'Michael' }],
'symbol' => [Symbol(foo)],
'boolean' => [true, false]
}
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน:
ตัวอย่างโค้ด
const arr = ['class', 2, [7, 8, 9], {"name": "Michael"}, Symbol('foo'), true, false, 'name', 6];
const classifyArray = arr => {
return arr.reduce((acc, val) => {
const previousData = acc.get(typeof val);
if (previousData) {
acc.set(typeof val, [...previousData, val]);
} else {
acc.set(typeof val, [val]);
}
return acc;
}, new Map());
};
console.log(classifyArray(arr));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
Map(5) {
'string' => ['class', 'name'],
'number' => [2, 6],
'object' => [[7, 8, 9], { name: 'Michael' }],
'symbol' => [Symbol(foo)],
'boolean' => [true, false]
}