如何合并两个JS对象,保留目标对象非空属性并覆盖空属性
实现方法
你要求的合并规则可以通过遍历obj1的属性逐个判定取值实现,以下是JavaScript的实现代码:
基础版(仅合并两个对象共有的属性,空值判定为空字符串)
const obj1 = {lastName: "", address1: "Some address"}; const obj2 = {lastName: "Salivan", address1: "1200 Getty Center Dr"}; const obj3 = Object.fromEntries( Object.entries(obj1).map(([key, value]) => { // 若obj1属性值为空则取obj2对应值,否则保留obj1原值 return [key, value === '' ? obj2[key] : value]; }) ); console.log(obj3); // 输出:{ lastName: 'Salivan', address1: 'Some address' }
扩展规则说明
- 如果你的场景中「空值」还包含
null、undefined,可以把判断条件修改为:value == null || value === '' - 如果需要把
obj2中独有的、obj1不存在的属性也合并到最终结果中,可以用以下代码:
const obj3 = { // 先按规则处理obj1的所有属性 ...Object.fromEntries( Object.entries(obj1).map(([key, value]) => [key, value === '' ? obj2[key] : value]) ), // 追加obj2中obj1没有的属性 ...Object.fromEntries( Object.entries(obj2).filter(([key]) => !obj1.hasOwnProperty(key)) ) };
深对象合并补充
如果你的对象是包含嵌套对象的复杂结构,需要写递归逻辑处理嵌套层的合并,单层对象用上述代码即可满足需求。
内容的提问来源于stack exchange,提问作者Sadi Zeynalov
相关产品推荐
相关产品推荐

