惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 努力&快乐

springboot 手动开启事务及手动提交事务 js MD5包含中文串时加密结果与JAVA结果不一致的解决方案 mongodb配置、启动、备份 linux系统关闭指定服务的方式 Dart 语言简易教程系列 查看java内存情况命令 JAVA用QRCode生成二维码 安装redis时Newer version of jemalloc required错误解决 代码指标工具 spring mvc接收ajax提交的JSON数据,并反序列化为对象 二进制样式的字符串与byte数组互转函数示例 .net运行时dll的查找路径顺序 WebStorm11 注册 MSSql使用SQL语句快速查看表对的就说明,及表字段描述及字段类型 多个App间传递数据 cordova混合开发:Android中native调用javascript cordova plugin数据传递概要 javascript不用new关键字创建对象示例 .Net事件管道详解图
JavaScript通过递归合并JSON
努力&快乐 · 2018-09-11 · via 博客园 - 努力&快乐

通过递归合并JSON:

 function mergeJSON(o, n) {
    let oType = Object.prototype.toString.call(o);
    let nType = Object.prototype.toString.call(n);
    if (nType == '[object Object]' && oType == '[object Object]') {
        //合并属性(object)
        for (let p in n) {
            if (n.hasOwnProperty(p) && !o.hasOwnProperty(p)) {
                o[p] = n[p];
            } else if (n.hasOwnProperty(p) && (o.hasOwnProperty(p))) {
                let oPType = Object.prototype.toString.call(o[p]);
                let nPType = Object.prototype.toString.call(n[p]);
                if ((nPType == '[object Object]' && oPType == '[object Object]') || (nPType == '[object Array]' && oPType == '[object Array]')) {
                    mergeJSON(o[p], n[p]);
                } else {
                    o[p] = n[p];
                }
            }
        }
    } else if (nType == '[object Array]' && oType == '[object Array]') {
        //合并属性(array)
        for (let i in n) {
            let oIType = Object.prototype.toString.call(o[i]);
            let nIType = Object.prototype.toString.call(n[i]);
            if ((nIType == '[object Object]' && oIType == '[object Object]') || (nIType == '[object Array]' && oIType == '[object Array]')) {
                mergeJSON(o[i], n[i]);
            } else {
                o[i] = n[i];
            }
        }
    }

    //合并属性(other)
    o = n;
}

//test

let json1={
    "a": "json1", 
    "b": 123, 
    "c": {
        "dd": "json1 dd", 
        "ee": 556, 
        "f": "ff1"
    }, 
    "list": [
        {
            "a": 123, 
            "b": 96
        }, 
        {
            "a": 45, 
            "b": 56
        }
    ]
};
let json2={

    "a": "json2", 
    "a2": 369, 
    "c": {
        "dd2": "json2 dd", 
        "ee": "gg2"
    }, 
    "list": [
        {
            "a": "a1", 
            "b1": 69
        }, 
        369, 
        {
            "i3": 36
        }
    ]
};

mergeJSON(json1,json2);

console.log(JSON.stringify(json1));

posted on 2018-09-11 13:40  努力&快乐  阅读(541)  评论()    收藏  举报