JavaScript 实现只复制已存在属性的笔记
在 JavaScript 中,如果需将一个对象的属性复制到另一个对象中,但只复制目标对象中已经存在的属性,可以使用以下几种方法:
1. 手动遍历属性
通过遍历 source
对象的属性,并判断 target
对象中是否存在对应属性,决定是否进行复制。
const source = { name: 'John', age: 30 };
const target = { name: 'Mike' };
for (let key in source) {
if (target.hasOwnProperty(key)) {
target[key] = source[key];
}
}
console.log(target); // 输出: { name: 'John' }
- 优点: 简单直接,控制权完全在开发者手中。
- 缺点: 代码较为冗长,不适合处理复杂逻辑。
2. 使用 Lodash 的 _.assignWith
Lodash 提供了 _.assignWith
方法,可以传入自定义的处理逻辑。
const _ = require('lodash');
const source = { name: 'John', age: 30 };
const target = { name: 'Mike' };
_.assignWith(target, source, (objValue, srcValue, key) => {
return target.hasOwnProperty(key) ? srcValue : objValue;
});
console.log(target); // 输出: { name: 'John' }
- 优点: 灵活性高,可以处理更复杂的场景。
- 缺点: 需要引入第三方库。
3. 使用 Object.keys
和 forEach
通过现代 JavaScript 语法,使用 Object.keys
和 forEach
进行属性复制。
const source = { name: 'John', age: 30 };
const target = { name: 'Mike' };
Object.keys(target).forEach(key => {
if (source.hasOwnProperty(key)) {
target[key] = source[key];
}
});
console.log(target); // 输出: { name: 'John' }
- 优点: 语法简洁,适合现代 JavaScript 项目。
- 缺点: 不适用于深层嵌套对象的复制。
总结
以上方法都能实现只复制目标对象中已存在属性的功能,可以根据项目需求选择最适合的方式:
- 如果需要完全控制逻辑,手动遍历适合你。
- 如果项目中已经使用了 Lodash,可以直接利用其工具函数。
- 如果偏好使用现代 JavaScript 语法,
Object.keys
和forEach
是一个好选择。