1.0.2 • Published 3 years ago
@jscoding/merge v1.0.2
@jscoding/merge
deep merge object 參考 deepmerge
Install
npm install @jscoding/merge
Usage
const merge = require('@jscoding/merge');
merge({a:1}, {b:2}); // output - {a:1, b:2}
merge({a:1}, {a:2}); // output - {a:2}
merge({a:1}, {b:2}); // output - {a:1, b:2}
merge({a: [1,2,3]}, {a: [4,5,6]}); // output - {a: [1,2,3,4,5,6]}
merge({a: [1,2,3]}, {a: [4,5,6]}, { arrayMergeTypeDefault: 'append'}); // output - {a: [1,2,3,4,5,6]}
merge({a: [1,2,3]}, {a: [4,5,6]}, { arrayMergeTypeDefault: 'replace'}); // output - {a: [4,5,6]}
merge({a: [1,2,3,4,5]}, {a: [4,5,6]}, { arrayMergeTypeDefault: 'override'}); // output - {a: [4,5,6,4,5]}
merge({a: [1,2,3]}, {a: [4,5,6,7,8]}, { arrayMergeTypeDefault: 'overrideOnlyTargetUndefined'}); // output - {a: [1,2,3,7,8]}
merge({a: [1,2,3]}, {a: [2,3,4]}, { arrayMergeTypeDefault: 'addSet'}); // output - {a: [1,2,3,4]}
const a = {
arr1: [0, 1, 2, 3, 4],
arr2: [0, 1, 2, 3, 4],
arr3: [0, 1, 2, 3, 4],
arr4: [0, 1, 2, 3, 4],
arr5: [0, 1, 2],
arr6: [0, 1, 2, 3, 4]
}
const b = {
arr1: [5, 6, 7, 8, 9],
arr2: [5, 6, 7, 8, 9],
arr3: [5, 6, 7, 8, 9],
arr4: [5, 6, 7],
arr5: [5, 6, 7, 8, 9],
arr6: [2, 3, 4, 5, 6]
}
merge(a, b, {
arrayMergeTypeByKey: {
arr1: 'append',
arr2: 'insert',
arr3: 'replace',
arr4: 'override',
arr5: 'overrideOnlyTargetUndefined',
arr6: 'addSet',
}
});
/* output:
{
arr1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
arr2: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4],
arr3: [5, 6, 7, 8, 9],
arr4: [5, 6, 7, 3, 4],
arr5: [0, 1, 2, 8, 9],
arr6: [0, 1, 2, 3, 4, 5, 6]
}
*/
const c = {
sub1: {
arr: [0, 1, 2, 3, 4],
sub2: {
arr: [0, 1, 2, 3, 4]
}
}
}
const d= {
sub1: {
arr: [2, 3, 4, 5, 6],
sub2: {
arr: [5, 6, 7]
}
}
}
merge(c, d, {
arrayMergeTypeByKey: {
'sub1.sub2.arr': 'override'
}
});
/* output:
{
sub1: {
arr: [0, 1, 2, 3, 4, 5, 6],
sub2: {
arr: [5, 6, 7, 3, 4]
}
}
}
*/
Merge Options
arrayMergeTypeDefault
: 預設的 ArrayMergeTypeappend
: 新增模式 (預設), 會將值合併在原值之後insert
: 插入模式, 會將值插入到原值之前replace
: 取代模式, 會以值取代原值override
: 合併模式, 覆寫同索引中的值overrideOnlyTargetUndefined
: 合併模式, 若同索引中無值才會覆寫addSet
: 去重模式, 會將值合併在原值之後, 但原值中已存在的內容不會加入
arrayMergeTypeByKey
: 依對應的 Object Key 名稱設定 Array Merge 方法
{ key: value }, ...
key : Object Key 名稱
value : ArrayMergeType : (同 arrayMergeTypeDefault 中的 ArrayMergeType)