Dùng hasOwnProperty() kiểm tra key đã tồn tại trong object đích trước khi gán.
Ví dụ
var first = {key1: 100, key2: 40, key3: 70};
var second = {key2: 80, key3: 70, key4: 1000};
function mergeWithoutOverwrite(target, source) {
for (var key in source) {
if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {
target[key] = source[key];
}
}
return target;
}
console.log(mergeWithoutOverwrite(first, second));
Cách chạy
node demo.js
Kết quả
{ key1: 100, key2: 40, key3: 70, key4: 1000 }
Giải thích: key2, key3 đã có trong first nên không bị ghi đè. key4 mới nên được thêm vào.
Cách hiện đại (ES2018+):
const merged = {...first, ...Object.fromEntries(
Object.entries(second).filter(([k]) => !first.hasOwnProperty(k))
)};