我正在寻找 typescript/javascript 中 jQuery.fn.extend
的实现。具体来说,我对它忽略源对象中的未定义
值的部分感兴趣。
const obj1 = {
a: 1,
b: undefined
};
const obj2 = {
a: undefined, // Should be ignored.
b: 100
};
const merged = $.extend(obj1, obj2);
console.log(merged); // {a: 1, b: 100}
要合并的对象的结构不一定是众所周知的,并且一个对象可能包含比另一个对象更多的属性。
最佳答案
您可以定义一个辅助函数,该函数将创建一个删除了 undefined
属性的对象:
const definedProps = obj => Object.fromEntries(
Object.entries(obj).filter(([k, v]) => v !== undefined)
);
然后合并变成:
const merged = Object.assign(obj1, definedProps(obj2));
const obj1 = {
a: 1,
b: undefined
};
const obj2 = {
a: undefined, // Should be ignored.
b: 100
};
const definedProps = obj => Object.fromEntries(
Object.entries(obj).filter(([k, v]) => v !== undefined)
);
const merged = Object.assign(obj1, definedProps(obj2));
console.log(merged);
此解决方案使用 Object.fromEntries
这是相当新的,但很容易填充
Object.fromEntries = arr => Object.assign({}, ...arr.map( ([k, v]) => ({[k]: v}) ));
关于javascript - 合并 javascript 中的对象,同时忽略未定义的属性值(jQuery.fn.extend 行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650634/