当前位置: 首页 > news >正文

Javascript对象合并

一、浅合并(只合并第一层属性)

1. Object.assign()(不会递归合并)

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };const merged = Object.assign({}, obj1, obj2);
console.log(merged); // { a: 1, b: 3, c: 4 }
  • 后面的对象属性会覆盖前面的。

  • 不修改原始对象(如果第一个参数是空对象 {})。

2. 展开运算符 …

const merged = { ...obj1, ...obj2 };

效果同 Object.assign,更简洁。

二、深合并(递归合并多层对象)

浅合并只处理第一层属性,如果属性值是对象,不会递归合并:

const obj1 = { a: 1, b: { x: 1 } };
const obj2 = { b: { y: 2 }, c: 3 };// 浅合并
const merged = { ...obj1, ...obj2 };
console.log(merged); // { a: 1, b: { y: 2 }, c: 3 },丢失了 b.x

实现一个简单的深合并函数:

function deepMerge(target, source) {const result = { ...target };for (const key in source) {if (source[key] instanceof Object &&key in target &&target[key] instanceof Object) {result[key] = deepMerge(target[key], source[key]);} else {result[key] = source[key];}}return result;
}// 示例
const obj1 = { a: 1, b: { x: 1 } };
const obj2 = { b: { y: 2 }, c: 3 };const merged = deepMerge(obj1, obj2);
console.log(merged); // { a: 1, b: { x: 1, y: 2 }, c: 3 }

三、使用库:lodash 的 _.merge

如果你项目中已经用到了 lodash,推荐直接使用:

import _ from 'lodash';const merged = _.merge({}, obj1, obj2);

支持深合并且可靠、处理边界情况多。

总结

方法是否递归是否修改原对象特点
Object.assign()否(如传空对象)简单、浅合并
... 展开符号更简洁、浅合并
自定义 deepMerge灵活、可控
lodash.merge稳定、推荐在项目中使用
http://www.dtcms.com/a/306951.html

相关文章:

  • Centos7 | 防火墙(firewalld)使用ipset管理ip地址的集合
  • MySQL 读写分离(含示例代码)
  • 新注册企业信息查询“数据大集网”:驱动企业增长的源头活水
  • 10 卷积神经网络
  • LLMs之Agent:GLM-4.5的简介、安装和使用方法、案例应用之详细攻略
  • 51单片机入门:数码管原理介绍及C代码实现
  • 【硬件】元器件选型
  • 【ESP32设备通信】-LAN8720与ESP32集成
  • 订阅区块,部署合约,加载合约
  • Akamai CloudTest before 60 2025.06.02 XXE注入导致文件包含漏洞(CVE-2025-49493)
  • MOEA/DD(多目标进化算法基于分解)简介
  • AAAI‘26 | 聚焦人工智能前沿:西工大李学龙教授荣任赞助主席,论文取号逼近三万,精彩不容错过!
  • Javaweb———HTTP响应头属性讲解
  • Redis实现数据传输简介
  • 【AI落地应用实战】利用 Amazon Bedrock Claude3 打造个性化 AI Character 应用
  • C++反射
  • JVM 性能调优实战:让系统性能 “飞” 起来的核心策略
  • B站 XMCVE Pwn入门课程学习笔记(6)
  • SpringBoot 实现 RAS+AES 自动接口解密
  • 2023年数学建模国赛C题第一问解答
  • 流匹配在翼型生成中的应用:完整实现指南
  • 实习小记(个人中心的编辑模块)
  • C++提高编程学习--模板
  • 【python 获取邮箱验证码】模拟登录并获取163邮箱验证码,仅供学习!仅供测试!仅供交流!
  • jakarta.websocket.DeploymentException:Endpoint instance creation failed
  • 2021 年 NOI 最后一题题解
  • pandas 分组相同赋值1然后累加
  • PAT 甲级题目讲解:1011《World Cup Betting》
  • 【MySQL 数据库】MySQL索引特性(一)磁盘存储定位扇区InnoDB页
  • Linux c网络专栏第四章io_uring