อัปเดต property เฉพาะที่มีอยู่ในออบเจกต์ต้นทางด้วย hasOwnProperty()
วนลูป key ของออบเจกต์แรก ถ้าออบเจกต์ที่สองมี key นั้น ให้เอาค่าใหม่ มิฉะนั้นคงค่าเดิม
ตัวอย่างโค้ด
var markDetails1 = {
'marks1': 78,
'marks2': 65
};
var markDetails2 = {
'marks2': 89,
'marks3': 90 // key นี้ไม่มีใน markDetails1 จะถูกข้าม
};
function updateJavaScriptObject(details1, details2) {
const outputObject = {};
Object.keys(details1).forEach(obj => {
outputObject[obj] = details2.hasOwnProperty(obj) ? details2[obj] : details1[obj];
});
return outputObject;
}
console.log(updateJavaScriptObject(markDetails1, markDetails2));
// { marks1: 78, marks2: 89 }
วิธีรัน
node fileName.js
ผลลัพธ์
{ marks1: 78, marks2: 89 }
คำอธิบาย
Object.keys(details1)ดึง key ทั้งหมดของออบเจกต์แรกhasOwnProperty()ตรวจสอบว่า key นั้นเป็นของตัวเอง (ไม่ใช่ inherited)- ใช้ ternary operator เลือกค่า: มีใน details2 ใช้ค่าใหม่ ไม่มีใช้ค่าเก่า
marks3ถูกข้ามเพราะไม่มีใน details1
รูปแบบย่อ ES6+
const update = (obj1, obj2) =>
Object.keys(obj1).reduce((acc, key) => {
acc[key] = key in obj2 ? obj2[key] : obj1[key];
return acc;
}, {});