บทความนี้มีเนื้อหาเหมือนกับ ID 1004057933 สมบูรณ์แบบ จึงขออธิบายเพิ่มเติมเกี่ยวกับ Optional Chaining และ Nullish Coalescing ที่ช่วยทำให้โค้ดปลอดภัยกว่า
โค้ดปรับปรุงให้ปลอดภัย (Safe Parsing)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Safe Parse Nested</title>
<style>
body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
.result { font-size: 18px; font-weight: 500; color: rebeccapurple; }
</style>
</head>
<body>
<h1>Parse Nested Objects อย่างปลอดภัย</h1>
<div class="result"></div>
<button class="Btn">คลิกที่นี่</button>
<h3>คลิกเพื่อ parse JSON object ด้วย Optional Chaining</h3>
<script>
const json = {
storeData: [
{
items: [
{ itemID: 12, cost: { costNum: 100 } },
{ itemID: 22, cost: { costNum: 250 } },
{ itemID: 19, cost: { costNum: 350 } }
]
}
]
};
const resEle = document.querySelector(".result");
document.querySelector(".Btn").addEventListener("click", () => {
// ใช้ Optional Chaining (?.) และ Nullish Coalescing (??)
const total = json.storeData
.flatMap(store => store.items ?? [])
.reduce((sum, item) => sum + (item.cost?.costNum ?? 0), 0);
json.storeData.forEach(store => {
(store.items ?? []).forEach(item => {
resEle.innerHTML += `itemID: ${item.itemID} costNum: ${item.cost?.costNum ?? 'N/A'}<br>`;
});
});
resEle.innerHTML += `Total: ${total}<br>`;
});
</script>
</body>
</html>
คำอธิบายเทคนิคใหม่
?.(Optional Chaining): เข้าถึง property แบบปลอดภ ไม่ error ถ้าค่าเป็น null/undefined??(Nullish Coalescing): ให้ค่า default เฉพาะเมื่อค่าเป็น null หรือ undefined เท่านั้น (ไม่ใช่ falsy อื่นๆ)flatMap: รวม map + flat ระดับเดียว สะดวกกว่า nested forEach
ผลลัพธ์
แสดง itemID และ costNum ของแต่ละรายการ พร้อมผลรวม 700