JavaScript实现JSON合并操作示例【递归深度合并】

yizhihongxing

JavaScript实现JSON合并操作示例【递归深度合并】

在JavaScript开发中,我们经常需要合并两个或多个JSON对象。如果不加注意,使用原生JavaScript合并JSON对象会遇到一些问题,比如仅会执行浅合并(只合并顶级属性且不支持数组合并)、忽略null和undefined属性。下面我们来介绍递归深度合并两个JSON对象的方法,解决上述问题。

递归深度合并两个JSON对象

递归深度合并有利于在合并具有深层嵌套结构的JSON对象时获得更准确的结果。

function deepMerge(target, source) {
  // 遍历源JSON对象
  for (const key of Object.keys(source)) {
    // 如果源对象当前属性是一个JSON对象,则递归地对其进行合并
    if (source[key] instanceof Object) {
      Object.assign(source[key], deepMerge(target[key], source[key]))
    }
  }
  // 合并所有属性
  return Object.assign({}, target, source)
}

// 示例1
const obj1 = { x: { y: 1 }, z: [3, 4] }
const obj2 = { x: { z: 3 }, y: 2 }
console.log(deepMerge(obj1, obj2)) // 输出 { x: { y: 1, z: 3 }, y: 2, z: [3, 4] }

// 示例2
const obj3 = { x: { y: { z: 1 } }, w: [2] }
const obj4 = { x: { y: { w: 3 } }, z: 3 }
console.log(deepMerge(obj3, obj4)) // 输出 { x: { y: { z: 1, w: 3 } }, w: [2], z: 3 }

上述代码中,我们定义了一个deepMerge()函数,它把目标JSON对象和源JSON对象作为输入参数。其中,我们首先使用Object.keys()方法遍历源JSON对象。若源对象当前属性是一个JSON对象,则递归地对其进行合并。最后调用Object.assign()方法对合并后的JSON对象进行合并。

示例说明

示例1

obj1中有x和z两个属性。x是一个子对象,包含一个y属性,而z是一个数组,包含两个元素3和4。obj2中包含x、y两个属性,x也是一个子对象,包含z属性。运行结果表明,deepMerge()方法成功地将两个JSON对象合并为一个JSON对象,并递归地合并了它们的x子对象,将y属性的值从obj2合并到了obj1,同时z属性值也正确地合并了。

示例2

obj3比obj1更深层嵌套,包含x属性作为子对象,x又包含y属性作为子对象,y包含z属性作为末级属性。同样,对于obj4,x是一个子对象,包含y属性和z属性。运行结果表明,我们成功地把这两个JSON对象递归合并了,同时正确地合并了z属性,并将y子对象合并起来,并添加了一个新属性w到y子对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现JSON合并操作示例【递归深度合并】 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • VC程序设计小技巧20例

    “VC程序设计小技巧20例”完整攻略 简介 VC程序设计小技巧20例是VC++程序设计中常用的技巧总结,适合于从事VC++开发者,主要包括优化技巧、调试技巧、安全技巧等。以下是详细的攻略总结。 1. 使用switch代替if语句 if语句在判断多个变量时效率低下,可以使用switch代替,代码如下: char c; cin >> c; switc…

    C 2023年5月23日
    00
  • C 循环

    当我们需要重复执行某些特定的代码时,循环结构便发挥了重要作用。在 C 语言中,循环语句主要有三种,分别是 for 循环、while 循环和 do…while 循环。下面详细讲解这三种循环语句的使用攻略。 for 循环 for 循环的语法如下: for (初始化表达式; 条件表达式; 更新表达式) { // 待执行的语句 } 其中,初始化表达式只会在循环开…

    C 2023年5月10日
    00
  • C++分步实现职工管理系统详解

    C++分步实现职工管理系统详解攻略 1. 程序基本框架 职工管理系统可以分为三个类别:员工基本信息类(Employee),普通员工类(Worker)和经理类(Manager)。其中,普通员工类和经理类都继承了员工基本信息类,因此程序框架如下: // 员工信息类 class Employee { public: virtual void showInfo() …

    C 2023年5月30日
    00
  • C语言实现字符串匹配KMP算法

    C语言实现字符串匹配KMP算法 什么是KMP算法 字符串匹配是计算机科学中的一个基本问题,给定两个文本串A和B,其中A称为主串,B称为模式串,现在要查找B在A中第一次出现的位置,这就是字符串匹配的问题。 KMP算法(Knuth-Morris-Pratt算法)是一种字符串匹配算法,它利用了字符串的局部匹配特性来提升匹配效率。与暴力匹配算法相比,KMP算法的时间…

    C 2023年5月22日
    00
  • Dev-C++同时编译多个C或C++文件方法

    使用Dev-C++同时编译多个C或C++文件,需要进行如下步骤: 新建工程 打开Dev-C++,选择File -> New -> Project -> Console Application,点击“OK”按钮。在弹出的对话框中,输入项目名称和存储路径,点击“Next”按钮。 添加文件 在工程中,先新建一个主函数所在的.c或.cpp文件,然后…

    C 2023年5月23日
    00
  • Golang Gin框架实现多种数据格式返回结果详解

    Golang Gin框架是常用的Web框架之一,它提供了丰富的API和中间件,能够快速搭建Web服务,同时还支持多种数据格式的返回结果。下面是一份实现多种数据格式返回结果的攻略,包括JSON、XML、HTML和Plain Text格式的返回结果。 简介 首先,为了使用Gin框架,需要先安装Gin模块: go get -u github.com/gin-gon…

    C 2023年5月23日
    00
  • C++实现完整功能的通讯录管理系统详解

    C++实现完整功能的通讯录管理系统详解 本文将详细讲解如何使用C++语言实现一个完整功能的通讯录管理系统,包含联系人的增、删、改、查等基础功能,以及文件读写、界面美化等高级功能,以及如何使用编程技巧提高代码的可读性和可维护性。 程序的需求分析 管理员:管理员需要进行登录和注销操作,并对通讯录进行增、删、改、查等管理操作; 通讯录:通讯录需要记录联系人的姓名、…

    C 2023年5月23日
    00
  • JSON.parse()和JSON.stringify()使用介绍

    让我来详细讲解一下 JSON.parse() 和 JSON.stringify() 的使用介绍。 JSON.parse() JSON.parse() 方法用于将一个 JSON 字符串转换成一个 JavaScript 对象。 语法如下: JSON.parse(text[, reviver]) 其中,text 表示待转换的 JSON 字符串,reviver 是可…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部