การแปลงข้อมูลแบบประกาศ
แปลงข้อมูลด้วย map, filter และ reduce
การแปลงข้อมูลแบบประกาศ เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
แบบประกาศเทียบกับแบบคำสั่ง
โค้ดแบบคำสั่งบอก HOW (การวนซ้ำ ตัวนับ และการเปลี่ยนแปลงข้อมูล) ส่วนโค้ดแบบประกาศบอก WHAT วิธีการของอาร์เรย์อย่าง map, filter และ reduce ช่วยให้คุณอธิบายการแปลงข้อมูลได้โดยไม่ต้องเขียนลูปเอง
const nums = [1, 2, 3, 4];
const doubled = nums.map((n) => n * 2);
console.log(doubled); // [2, 4, 6, 8]map: แปลงสมาชิกแต่ละตัว
map คืนอาร์เรย์ใหม่ที่มีความยาวเท่าเดิม โดยสมาชิกแต่ละตัวถูกแปลงด้วยฟังก์ชันของคุณ อาร์เรย์ต้นฉบับจะไม่ถูกเปลี่ยนแปลง
const names = ["ada", "bob"];
const upper = names.map((n) => n.toUpperCase());
console.log(upper); // ["ADA", "BOB"]
console.log(names); // unchangedfilter: เลือกสมาชิกบางส่วน
filter คืนอาร์เรย์ใหม่ที่มีเฉพาะสมาชิกซึ่งเงื่อนไขของคุณคืนค่าที่ถือว่าเป็นจริง
const nums = [1, 2, 3, 4, 5, 6];
const evens = nums.filter((n) => n % 2 === 0);
console.log(evens); // [2, 4, 6]reduce: รวมเป็นค่าเดียว
reduce ย่ออาร์เรย์ให้เป็นค่าเดียวด้วยการสะสมค่า โปรดระบุฟังก์ชันลดรูปและค่าเริ่มต้น
const nums = [1, 2, 3, 4];
const sum = nums.reduce((acc, n) => acc + n, 0);
console.log(sum); // 10การเชื่อมการทำงาน
เนื่องจากแต่ละวิธีการคืนอาร์เรย์ใหม่ คุณจึงสามารถเชื่อมวิธีการเหล่านี้เป็นกระบวนการที่อ่านง่ายจากบนลงล่าง
const nums = [1, 2, 3, 4, 5, 6];
const result = nums
.filter((n) => n % 2 === 0)
.map((n) => n * 10);
console.log(result); // [20, 40, 60]กระบวนการที่ใช้งานได้จริง
รวม filter, map และ reduce เพื่อหาคำตอบของคำถามเกี่ยวกับชุดข้อมูลด้วยนิพจน์เดียว
const orders = [
{ item: "pen", price: 3, paid: true },
{ item: "ink", price: 8, paid: false },
{ item: "pad", price: 5, paid: true }
];
const paidTotal = orders
.filter((o) => o.paid)
.map((o) => o.price)
.reduce((a, p) => a + p, 0);
console.log(paidTotal); // 8การแปลงเป็นรูปแบบใหม่
map สามารถปรับรูปแบบออบเจ็กต์ได้ ไม่ใช่แค่ตัวเลข ให้เลือกแต่ละระเบียนมาเป็นฟิลด์ที่คุณสนใจ
const users = [{ id: 1, name: "Ada", age: 36 }];
const summary = users.map((u) => ({ id: u.id, label: u.name }));
console.log(summary); // [{ id: 1, label: "Ada" }]reduce สร้างสิ่งใดก็ได้
reduce ไม่ได้มีไว้สำหรับหาผลรวมเท่านั้น แต่ยังใช้สร้างออบเจ็กต์ จัดกลุ่มข้อมูล หรือแม้แต่เขียนการทำงานแบบ map และ filter ขึ้นใหม่ได้
const words = ["a", "bb", "a", "ccc"];
const counts = words.reduce((acc, w) => {
acc[w] = (acc[w] || 0) + 1;
return acc;
}, {});
console.log(counts); // { a: 2, bb: 1, ccc: 1 }ลำดับมีความสำคัญ
การกรองก่อนการแปลงช่วยไม่ให้ต้องแปลงสมาชิกที่คุณจะทิ้งอยู่แล้ว วางตัวกรองที่ประมวลผลได้เร็วไว้ต้นกระบวนการเพื่อให้โค้ดชัดเจนและมีประสิทธิภาพ
const data = [1, 2, 3, 4, 5];
const out = data
.filter((n) => n > 2) // shrink first
.map((n) => n * n); // then transform
console.log(out); // [9, 16, 25]ไม่มีการเปลี่ยนแปลงข้อมูลเลย
วิธีการเหล่านี้ไม่เคยเปลี่ยนอาร์เรย์ต้นฉบับ จึงทำให้กระบวนการทำงานปลอดภัยและคาดเดาได้ เหมาะกับรูปแบบการเขียนเชิงฟังก์ชันอย่างยิ่ง
const src = [3, 1, 2];
const sorted = [...src].sort((a, b) => a - b);
console.log(sorted); // [1, 2, 3]
console.log(src); // [3, 1, 2] untouchedflatMap สำหรับผลลัพธ์แบบซ้อน
เมื่อ map สร้างอาร์เรย์ flatMap จะทำการ map และคลี่อาร์เรย์ออกหนึ่งระดับในขั้นตอนเดียว
const pairs = [1, 2, 3].flatMap((n) => [n, n * 10]);
console.log(pairs); // [1, 10, 2, 20, 3, 30]ตรวจสอบความเข้าใจ
การแปลงข้อมูลแบบประกาศ
สรุป
การแปลงข้อมูลแบบประกาศอธิบาย WHAT ไม่ใช่ HOW โดย map ใช้แปลงข้อมูล filter ใช้เลือกข้อมูล และ reduce ใช้รวมข้อมูลเป็นค่าเดียว คุณสามารถเชื่อมสิ่งเหล่านี้เป็นกระบวนการที่อ่านง่ายได้ ไม่มีวิธีการใดเปลี่ยนแปลงข้อมูลต้นฉบับ การกรองตั้งแต่ต้นมีประสิทธิภาพ และ reduce สามารถสร้างโครงสร้างใดก็ได้ เมื่อ map ให้ผลลัพธ์เป็นอาร์เรย์ ให้เลือกใช้ flatMap
คำถามที่พบบ่อย
บทเรียน “การแปลงข้อมูลแบบประกาศ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแปลงข้อมูลแบบประกาศ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแปลงข้อมูลแบบประกาศ”
แปลงข้อมูลด้วย map, filter และ reduce คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การแปลงข้อมูลแบบประกาศ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม
ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันบริสุทธิ์และผลข้างเคียง
- การแปลงข้อมูลแบบประกาศ
- การหลีกเลี่ยงการกลายสภาพ
- รูปแบบไร้อาร์กิวเมนต์ที่ตั้งชื่อ