JS对象赋值的问题

两个对象,一个属性多一个属性少,想从属性多的对象中往属性少的对象中赋值同名属性,有什么好的方法?
eg:

//有什么优雅的办法把obj2的属性赋值给obj1的同名属性。
//最好不要Object.keys()去遍历,而且不让obj2中的其他属性污染obj1。

const obj1 = {
    name: '',
    age: '',
    sex: ''
}

const obj2= {
    name: 'xiaoming',
    age: '18',
    sex: 'man',
    phone: '1xxxxxxxxxx',
    address: 'xx市xx区',
    friends:['xx','xxx']
}

我想到一种方法,如下:

const {name, age, sex} = obj2;
const obj3 = {...obj1, ...{name, age, sex}}
console.log( obj3 )            //{ name: 'xiaoming', age: '18', sex: 'man' }

但是新的问题就是:

  1. 这么写会不会有什么问题(不考虑深拷贝)。
  2. 如果在obj1中有值,但是obj2中的同名属性是null或者undefined'',怎么能不让nullundefined''覆盖原值呢?
阅读 3.2k
4 个回答
JSON.parse(JSON.stringify(obj1, (key, value) => obj2[key] || value));

那我可就要玩文字游戏了

obj1 = {
    ...obj1,
    ...obj2
}

反正obj1的name,age,sex被赋值了,反正没有调用其他的方法,有没有跨进同一条河,那是哲学家的事(捂嘴

const isDef = v => v !== undefined && v !== null
const obj2Keys = new Set(Object.keys(obj2))

Object.keys(obj1).forEach(key => {
  if (obj2Keys.has(key) && isDef(obj2[key])) {
    obj1[key] = obj2[key]
  } 
})

随便写写,没有封装

新手上路,请多包涵
        for (const key in obj1) {
            if (Object.hasOwnProperty.call(obj1, key)) {
                obj1[key] = obj2[key] || obj1[key]
            }
        }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏