Javascript对象散布着一个对象,该对象的属性中可能包含未定义的对象作为数据

问题描述

嘿,我正在尝试填写一个空的占位符对象(在这种情况下,它用作vue的V模型,但对这种情况并不重要)。 我正在扩展原始对象的对象中可能有也可能没有未定义的对象,但是无论传入对象的结构如何,我都需要保持第一个对象的结构。 例如 对象1

let object1 = { a : '',b : '',c : {name : 'Mark',title: 'Mr'}}

和对象2有时会像这样

let object2 = { a : 'AAA',b : 'BBB',c : undefined}

即使另一个对象的属性c未定义,我也需要保持对象1的结构。 在这种情况下

let object1 = { a : 'AAA',title: 'Mr'}}

谢谢

解决方法

尝试将object2作为第一项传播,然后将属性c作为第二项:

  object1={...object2,c:object1.c}

   object1={...object2,c : object2.c ? object2.c : object1.c}
,

如果要使用扩展语法,则可以定义一个简单的帮助代理,该代理可以将自己的键过滤为具有undefined以外的值的键。

let object1 = {a: '',b: '',c: {name: 'Mark',title: 'Mr'}}

let object2 = {a: 'AAA',b: 'BBB',c: undefined}


const result = { ...defined(object1),...defined(object2) }

console.log(result)

function defined(obj) {
  return new Proxy(obj,{
    ownKeys() {
      return Object.keys(obj).filter(key => obj[key] !== undefined)
    }
  })
}