Skip to content

Array Methods

Array methods ทำให้เขียน data transformation ได้สั้น อ่านง่าย และไม่ต้อง mutate ข้อมูลเดิม

ข้อมูลตัวอย่าง

Section titled “ข้อมูลตัวอย่าง”
const users = [
{ name: "สมชาย", age: 28, role: "developer" },
{ name: "สมหญิง", age: 34, role: "designer" },
{ name: "วิชัย", age: 22, role: "developer" },
{ name: "นภา", age: 30, role: "manager" },
];
// สร้าง array ใหม่จากการแปลงแต่ละ element
const names = users.map(user => user.name);
// ["สมชาย", "สมหญิง", "วิชัย", "นภา"]
const summaries = users.map(u => `${u.name} (${u.age})`);
// ["สมชาย (28)", "สมหญิง (34)", "วิชัย (22)", "นภา (30)"]
const devs = users.filter(u => u.role === "developer");
// [{ name: "สมชาย", ... }, { name: "วิชัย", ... }]
const seniors = users.filter(u => u.age >= 30);
// [{ name: "สมหญิง", ... }, { name: "นภา", ... }]

reduce — รวมเป็นค่าเดียว

Section titled “reduce — รวมเป็นค่าเดียว”
// รวมอายุ
const totalAge = users.reduce((sum, u) => sum + u.age, 0);
// 114
// นับตาม role
const roleCount = users.reduce((acc, u) => {
acc[u.role] = (acc[u.role] || 0) + 1;
return acc;
}, {});
// { developer: 2, designer: 1, manager: 1 }
// find — คืนตัวแรกที่เจอ (หรือ undefined)
const manager = users.find(u => u.role === "manager");
// { name: "นภา", age: 30, role: "manager" }
// findIndex — คืน index ตัวแรกที่เจอ (หรือ -1)
const idx = users.findIndex(u => u.name === "วิชัย");
// 2
// some — มีอย่างน้อย 1 ตัวที่ผ่านเงื่อนไข?
const hasMinor = users.some(u => u.age < 18); // false
const hasDev = users.some(u => u.role === "developer"); // true
// every — ทุกตัวผ่านเงื่อนไข?
const allAdult = users.every(u => u.age >= 18); // true
const allDevs = users.every(u => u.role === "developer"); // false
// forEach — วน loop (ไม่ return ค่า)
users.forEach(u => {
console.log(`${u.name}: ${u.role}`);
});
// sort mutates! ใช้ spread copy ก่อน
const sorted = [...users].sort((a, b) => a.age - b.age);
// เรียงอายุน้อย → มาก
// เรียง string
const namesSorted = [...names].sort((a, b) => a.localeCompare(b, "th"));
// รวม method chain เป็น pipeline
const result = users
.filter(u => u.role === "developer")
.map(u => u.name.toUpperCase())
.sort();
// ["วิชัย", "สมชาย"] (sorted)