0Pricing
JavaScript Academy · บทเรียน

การแปลงข้อมูลแบบประกาศ

แปลงข้อมูลด้วย 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); // unchanged

filter: เลือกสมาชิกบางส่วน

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

flatMap สำหรับผลลัพธ์แบบซ้อน

เมื่อ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟังก์ชันบริสุทธิ์และผลข้างเคียง
  2. การแปลงข้อมูลแบบประกาศ
  3. การหลีกเลี่ยงการกลายสภาพ
  4. รูปแบบไร้อาร์กิวเมนต์ที่ตั้งชื่อ
← กลับไปที่ JavaScript Academy