使用场景: 两个或多个对象需要合并,并且有相同的key时,用后面对象的value值
方法1: Object.assign(obj1, obj2)
这个方法是浅拷贝,则拷贝了对象的引用(也就是修改的话会影响到原对象)
特点: 若属性名相同,后面的属性会覆盖前面属性,对象和数组合并,数组会被转成对象,再被合并
const a = {
name: 'Aimee',
age: '19',
phone: '18888888888'
}
const b = {
name: 'lisa',
age: '26',
like: '13232231',
objSon: {
aaa: 'aaaaaa',
bbb: 'bbbbbbb'
}
}
const list = ['one', 'two', 'three']
const data = Object.assign(a, b)
console.log(data)
// 输出结果:{
// name: 'lisa',
// age: '26',
// like: '13232231',
// objSon: { aaa: 'aaaaaa', bbb: 'bbbbbbb' }
// }
console.log(Object.assign(a, list))
// 输出结果:{
// '0': 'one',
// '1': 'two',
// '2': 'three',
// name: 'lisa',
// age: '26',
// like: '13232231',
// objSon: { aaa: 'aaaaaa', bbb: 'bbbbbbb' }
// }
方法2: 利用扩展运算符{…a, …b}
特点: 该方法不会改变对象a,不会改变对象b
// An highlighted block
const data2 = {...a, ...b}
console.log(data2)
// 输出:{
// name: 'lisa',
// age: '26',
// like: '13232231',
// objSon: { aaa: 'aaaaaa', bbb: 'bbbbbbb' }
// }
方法3: _.merge(object, [sources])
如果要用深拷贝的小伙伴可以用lodash第三方库(https://www.lodashjs.com/docs/lodash.merge)
特点: 这方法会改变对象 object, 不会改变[sources],sources里面的子对象也可以被拷贝到
// An highlighted block
let data3 = _.merge(a, b)
console.log(data3)
// 输出:{
// name: 'lisa',
// age: '26',
// like: '13232231',
// objSon: { aaa: 'aaaaaa', bbb: 'bbbbbbb' }
// }
当然,自己手写函数也可以