@kamuisdo/deepmerge-fn
v1.1.1
Published
deepmerge js objects including function and array
Downloads
118
Readme
deepmerge-fn
Install
npm i @kamuisdo/deepmerge-fn --save
pnpm add @kamuisdo/deepmerge-fn
Introduce
- 合并source对象和target对象,source对象会被改变,target对象不变
- 递归合并两个对象
- 对于数组、方法可以通过配置进行合并
How to use
import deepMerge from '@kamuisdo/deepmerge'
const result = deepMerge(obj1, obj2, options?)
Options
- Options是String类型时,所有的字段都按照统一的规则合并,例如
{ options: 'cover' }
,object1所有字段都会被Object2的值覆盖 - Options是对象类型时,Options中的字段会按照各自指定的方式合并
- mode的值,对于值类型的字段都是obj2覆盖obj1的值,对于
function
,array
,Object
类型,根据mode不同有不同的合并方式cover
:对所有字段都做覆盖合并after
- function:obj1的方法先执行,obj2的方法后执行,obj1的方法的执行结果作为obj2的方法的参数,最终输出obj2的执行结果
- object: 合并
- array:obj2的数组拼接在obj1的数组后面
before
- function:obj2的方法先执行,obj1的方法后执行,obj2的方法的执行结果作为obj1的方法的参数,最终输出obj1的执行结果
- object: 合并
- array:obj2的数组拼接在obj1的数组后面
- 自定义方法: TODO
Example
const obj1 = {
string: 'string1',
obj:{
childString:'child string1',
childAfterArr:[1],
childCoverArr:[1,2],
childObj:{
subChildNumber:1
},
childFun: (a)=>{ return a+1 }
}
}
const obj2 = {
string: 'string2',
array: [1,2,3],
obj:{
childString:'child string2',
childNumber:199,
childAfterArr:[2],
childCoverArr: [1,2,3],
childObj:{
subChildNumber:2,
subChildString:'subChildString2'
},
childFun: (a)=>{ return a+2 }
}
}
const mergeResult = deepMerge(obj1,obj2,{
mode:{
obj:{
childAfterArr:'after', // array will be concat
childFun:'after' // function will be concat
}
}
})
// mergeResult expect to be:
{
string: 'string2',
array: [1,2,3],
obj:{
childString:'child string2',
childNumber:199,
childAfterArr:[1,2],
childCoverArr: [1,2,3],
childObj:{
subChildNumber:2,
subChildString:'subChildString2'
},
childFun: (val)=>{
const fn1 = (a)=>{ return a+1 }
const fn2 = (a)=>{ return a+2 }
return fn2(fn1(val))
}
}
}
// 方法合并的效果是先后调用两个方法,并返回后一个方法的返回值
mergeResult.obj.childFun(1) === 4