合并 Object 的几种基本方法

在开发过程中,我们经常会遇到合并对象的需求,今天我们就来了解一下合并对象的几种基本方法。

Object.assign()

Object.assign() 方法可以将一个或多个源对象的属性复制到目标对象中。如果源对象有自己的属性,那么它们的值将被保留。

javascript 复制代码
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };

const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

Object.assign() 是浅拷贝,如果源对象中有值的引用,合并后在目标对象中修改值引用,同时会修改源对象的值引用。

javascript 复制代码
const o1 = { a: 1 };
const o2 = { b: {
    name: "b"
} };

const obj = Object.assign({}, o1, o2);
obj.b.name = "new_b";
console.log(o2.b); // {name: 'new_b'}

解构赋值

使用解构赋值可以将对象的属性复制到一个新的对象中。

javascript 复制代码
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const obj = { ...o1, ...o2 };
console.log(obj); // {a: 1, b: 2, c: 2}

可以看出,使用结构赋值合并对象时,后面对象的属性值会覆盖前面已有属性值。

使用递归方法

我们可以通过递归的方法将对象中的嵌套对象合并到一个新的对象中。

javascript 复制代码
/** @format */

function mergeObjects(obj1, obj2) {
    const mergedObj = Object.assign({}, obj1, obj2);

    // 递归处理嵌套对象
    Object.keys(mergedObj).forEach((key) => {
        if (typeof mergedObj[key] === "object" && obj1[key] && obj2[key]) {
            mergedObj[key] = mergeObjects(obj1[key], obj2[key]);
        }
    });

    return mergedObj;
}

const obj1 = { a: 1, b: { c: 2, d: 3, e: { name: "e" } } };
const obj2 = { a: 2, b: { c: 3, d: 4, e: { age: 18 } } };
const mergedObj = mergeObjects(obj1, obj2);
console.log(mergedObj);
// {a:2,b:{c:3,d:4,e:{name:e,age:18}}}

总结

以上介绍的是合并对象的三种基本操作,它们也只是简化了合并对象的步骤,在具体使用的时候,需要根据场景判断哪种最合适。

相关推荐
kyriewen5 小时前
Anthropic 估值逼近万亿美元,Claude Sonnet 5 + Claude Science 一天两连发
前端·ai编程·claude
小徐_23337 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
山河木马8 小时前
矩阵专题3-怎么创建投影矩阵(uProjectionMatrix)
javascript·webgl·计算机图形学
天蓝色的鱼鱼9 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
泯泷10 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花10 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷10 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜10 小时前
Spring Boot 核心知识点总结
前端
lichenyang45310 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端