【基本功能】
Object.assign(target, source)
可以将多个源对象的可枚举自有属性复制到目标对象,返回修改后的目标对象。
Object.assign(target, source1, source2);
将 source1、source2 的属性复制到 target,返回 target,若多个源对象有相同属性,后者的值会覆盖前者。
【使用过程中遇到过的问题】
source里面的属性有而target中没有的属性,会直接复制给target,这个时候没什么问题。
但是,source里面没有的属性有而target中有的属性,会跳过而直接使用target原来的值。 若不做处理会导致更新后的值其实某些字段并没有更新,还是会保留原来的值。
(数据是从后端来的,是存在某个字段的值为null,后端就不传这个字段的情况的)
所以这个时候要先清除原来的值
function assignAndDeleteMissing(target, ...sources) {
// 获取目标对象的所有键
const targetKeys = Object.keys(target);
console.log(targetKeys)
// 删除目标对象中不在源对象中的属性
targetKeys.forEach(key => {
let exists = false;
sources.forEach(source => {
if (source.hasOwnProperty(key)) {
exists = true;
}
});
if (!exists) {
delete target[key];
console.log('delete', key)
}
});
// 执行 Object.assign
return Object.assign(target, ...sources);
}
为了不在更新数据的时候产生多余的变化,如果是已存在的属性,则不做修改,只将source中不存在的属性先行删除,然后再执行 Object.assign 操作
【附】官网链接