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)
}
console.log(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 }
js对象递归合并merge
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- merge基本原理 我们知道git 合并文件是以行为单位进行一行一行进行合并的,但是有些时候并不是两行内容不一样g...
- 一般开发的时候,后端返回的数据格式并不是自己想要的,因此就需要自己对后端传过来的数据进行组合并赋值给一个新的数组/...