问题描述
嘿,我正在尝试填写一个空的占位符对象(在这种情况下,它用作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)
}
})
}