js - 对象递归合并merge
js - 对象递归合并merge
deepAssign、merge
function isObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]' } function isArray(arr) { return Array.isArray(arr) } function merge(target, ...arg) { return arg.reduce((acc, cur) => { return Object.keys(cur).reduce((subAcc, key) => { const srcVal = cur[key] if (isObject(srcVal)) { subAcc[key] = merge(subAcc[key] ? subAcc[key] : {}, srcVal) } else if (isArray(srcVal)) { // series: [],下层数组直接赋值 subAcc[key] = srcVal.map((item, idx) => { if (isObject(item)) { const curAccVal = subAcc[key] ? subAcc[key] : [] return merge(curAccVal[idx] ? curAccVal[idx] : {}, item) } else { return item } }) } else { subAcc[key] = srcVal } return subAcc }, acc) }, target) } function consoleStr(target, space = 0) { console.log(JSON.stringify(target, null, space)) } // 数组合并 var arr1 = [1, 2, 3] var arr2 = [4, 5, 6] consoleStr(merge([], arr1, arr2)) // [4,5,6] consoleStr(merge(arr1, arr2)) // [4,5,6] 修改arr1 // 对象数组混合合并 consoleStr( merge({}, { q: 1, series: [{ a: 1, b: 2, data: [4] }] }, { a: 2, series: [{ a: 3, b: 4, data: [1, 2, 3] }] }) ) //{ q: 1, series: [ { a: 3, b: 4, data: [1, 2, 3]} ], a: 2 }
Lee2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步