Destructuring คืออะไร ? | พื้นฐาน JavaScript EP.12-14

Object Destructuring
เพื่อน ๆ เบื่อมั้ยครับ เวลาจะเข้าถึงค่าของ object ผ่าน key รู้สึกว่าต้องพิมพ์เยอะ โค้ดก็ยาวไหมครับ
ในตอนนี้ผมมีเทคนิคมาฝากเพื่อน ๆ กันครับ นั่นคือ Object Destructuring นั่นเอง
Object Destructuring เป็นฟีเจอร์ที่ทำให้เราสร้างตัวแปรจาก key ของ object ได้
เรามาดูความสามารถเต็ม ๆ กันนะครับ
1. Extract Property คือ การดึงค่าจาก object มาสร้างตัวแปร
// ได้ค่า "เหมียว" เหมือนกัน
const name = cat.name;
const { name } = cat;
2. Default Value คือ การดึงค่าเหมือนกับข้อ 1 แต่กำหนดค่า default ให้กับตัวแปรได้ เช่น ตัวอย่างโค้ด เราจะได้ค่าเป็น tuna เนื่องจากดึงค่า favoriteFood จาก object แล้วได้เป็น undefined
const { habits = "ขี้เล่น" } = cat;
3. Key Alias คือ เปลี่ยนชื่อตัวแปรจาก key เดิมที่ object มีอยู่
const { name: catName } = cat;
4. Deep Property คือ การดึงค่าจาก key ที่ value เป็น object อีกทีนึง
const {
favorite: { food },
} = cat;
Array Destructuring
เรารู้จักกับ Object Destructuring กันไปแล้ว นอกจาก Object แล้ว Array ก็ทำ Destructuring ได้เหมือนกันนะครับ
Array Destructuring เป็นฟีเจอร์ที่ทำให้เราสร้างตัวแปรจาก index ของ Array ได้
เราไปดูความสามารถเต็ม ๆ กันนะครับ
1. Extract Property คือ การดึงค่าจาก array มาสร้างตัวแปรเรียงตาม index แต่จะแตกต่างกับ object destructuring ที่จะดึงค่าจาก key ไหนก็ได้ ไม่เรียงตาม index แต่ถ้าเพื่อน ๆ อยากดึงค่าจาก index ที่ 2 แต่ไม่อยากใช้ค่าจาก index ที่ 0 กับ 1 ก็ไม่ต้องกังวลครับ เพราะเราสามารถเว้นช่องว่าง index ที่ไม่ต้องการได้นั่นเองครับ
const [first, second, thrid] = animals;
const [, , thrid2] = animals;
2. Default Value คือ การดึงค่าเหมือนกับข้อ 1 แต่กำหนดค่า default ให้กับตัวแปรได้ เช่น ตัวอย่างโค้ด เราจะได้ค่าเป็นแมว เนื่องจากดึงค่าจาก array แล้วได้เป็น undefined
const [, , , fourth = "แมว"] = animals;
3. Custom Key คือ กำหนดชื่อตัวแปรได้เอง ต่างกับ object destructuring ที่ต้องทำ key alias
// ได้ค่าเป็น "สุนัข" เหมือนกัน
const [first] = animals;
const [dog] = animals;
const [animal] = animals;
4. Deep Property คือ การดึงค่าจาก Key ที่ Value เป็น Array อีกทีนึง
const animals2 = [
["โบ้", "จุ้มเหม่ง"],
["เหมียว", "ไข่ขาว"],
];
const [[dog1, dog2], [cat1, cat2]] = animals2;
More
ที่จริงแล้วทั้ง Object Destructuring กับ Array Destructuring สามารถใช้ร่วมกันได้เป็นอย่างดีเลยครับ
จากตัวอย่างผมมี Object ที่ด้านในมีตัวแปรเก็บค่า Array ไว้
const cat1 = {
name: "เหมียว",
type: "แมว",
};
const cat2 = {
name: "ไข่ขาว",
type: "แมว",
};
ผมสามารถดึงค่า แมว จาก Array ได้ด้วยการดึงค่าจาก Object ก่อน แล้วดึงค่าจาก Array ต่อนั่นเอง
const pet = {
cats: [cat1, cat2],
};
// แมว
const {
cats: [, { type }],
} = pet;
กลับกัน ถ้าผมมี Array of Object ผมก็สามารถดึงชื่อของแมวตัวที่ 2 ได้ด้วยการดึงค่าจาก array ตัวที่สองก่อน แล้วค่อยดึงค่าจาก Object นั่นเองครับ
const pets = [cat1, cat2];
// ไข่ขาว
const [, { name }] = pets;
ถ้าใช้ JavaScript ผมแนะนำว่าควรเช็คค่าตัวแปรอีกรอบ เพราะบางครั้งการ Destructuring ที่ซับซ้อนหลายชั้น อาจจะทำให้เราสับสนและดึงค่าผิดได้ ก็เหมือนความสัมพันธ์ของเราที่ดูซับซ้อน แต่เราอาจจะเข้าใจผิดไปเองก็ได้ครับ 💔
สามารถรับชมแบบวิดีโอได้ที่นี่ครับ