“`可用於設定檔,雖然有很多方法可以將兩個或兩個以上物件合併,但龜毛如我,希望可以以第一個物件為基準,後續物件向前覆蓋,遇到相同 key 就覆蓋,這很適合用在設定檔,可以有效限制傳入設定檔僅在允許的 key 中。
可參考以下,隨便看
/**
* 物件覆蓋,以第一個物件為基礎
* 適用於 options 物件
* @since 1.04.2
* @param {object} baseObj
* @param {...object} overrideObjs
* @returns
*/
function objectOverride(baseObj, ...overrideObjs) {
// 將結果初始設為基礎物件
const result = { ...baseObj };
// 遍歷剩餘的物件
overrideObjs.forEach(obj => {
Object.keys(result).forEach(key => {
if (obj.hasOwnProperty(key)) {
result[key] = obj[key];
}
});
});
return result;
}
const obj1 = {
a: 1,
b: 2,
c: 3
};
const obj2 = {
b: 5,
c: 6,
d: 7
};
const result = objectOverride(obj1, obj2);
console.log(result); // { a: 1, b: 5, c: 6 }