Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

อัปเดตออบเจกต์ JavaScript ด้วยอีกออบเจกต์หนึ่ง แต่เฉพาะ key ที่มีอยู่แล้ว

อัปเดต 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;
  }, {});