在日常开发中,尤其是在处理配置对象或者嵌套的数据结构时,对象的深度合并成为一项常见需求。这篇博客将介绍如何在JavaScript中实现对象的深度合并,并提供具体的使用例子。
首先,我们来看一下深度合并(Deep Merge)函数的代码实现。
import { isObject } from '@/utils/is'
/**
* 深度合并
* @param src 源对象
* @param target 目标对象
*/
export function deepMerge<T = any>(src: any = {}, target: any = {}): T {
let key: string
for (key in target) {
src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key])
}
return src as T
}
isObject
代码
export function isObject(val: any): val is Record<any, any> {
return val !== null && is(val, 'Object')
}
src
: 源对象,即要被合并到的对象。target
: 目标对象,即从中获取数据来合并到src
的对象。函数返回一个类型为T
的新对象,这个新对象是src
和target
对象的深度合并结果。
假设你有两个对象,一个是person
,另一个是info
:
const person = {
name: '张三',
age: 30,
address: {
city: '北京',
country: '中国'
}
}
const info = {
job: '工程师',
address: {
street: '科技路'
}
}
使用deepMerge
函数,你可以这样合并这两个对象:
import { deepMerge } from '@/path-to-deepMerge'
const mergedPerson = deepMerge(person, info)
console.log(mergedPerson)
输出结果:
{
name: '张三',
age: 30,
job: '工程师',
address: {
city: '北京',
country: '中国',
street: '科技路'
}
}
深度合并对象在许多场景下都非常有用:
assign
函数进行对象合并lodash-es
是一个提供了很多有用工具函数的JavaScript库。其中,assign
函数用于将一个或多个源对象自身的可枚举属性从一个对象复制到目标对象。本文将详细介绍如何使用lodash-es
中的assign
函数进行对象合并。
首先,你需要安装lodash-es
。
npm install lodash-es --save
然后,在你的代码中导入assign
函数。
import { assign } from 'lodash-es';
assign
函数接受一个目标对象和一个或多个源对象作为参数,并将源对象的属性复制到目标对象中。
const object = { 'a': 1 };
const source = { 'b': 2 };
const result = assign(object, source);
console.log(result);
// 输出: { 'a': 1, 'b': 2 }
// 注意:目标对象也被改变了
console.log(object);
// 输出: { 'a': 1, 'b': 2 }
assign
仅复制对象自身的可枚举属性。const object = { 'a': 1, 'b': 2 };
const source1 = { 'b': 3, 'c': 4 };
const source2 = { 'c': 5 };
const result = assign(object, source1, source2);
console.log(result);
// 输出: { 'a': 1, 'b': 3, 'c': 5 }
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有