1.0.2 • Published 3 years ago

@jscoding/merge v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
3 years ago

@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

參考 deepmerge

  • arrayMergeTypeDefault : 預設的 ArrayMergeType
    • append: 新增模式 (預設), 會將值合併在原值之後
    • insert: 插入模式, 會將值插入到原值之前
    • replace: 取代模式, 會以值取代原值
    • override: 合併模式, 覆寫同索引中的值
    • overrideOnlyTargetUndefined: 合併模式, 若同索引中無值才會覆寫
    • addSet: 去重模式, 會將值合併在原值之後, 但原值中已存在的內容不會加入
  • arrayMergeTypeByKey : 依對應的 Object Key 名稱設定 Array Merge 方法
    { key: value }, ...
    key : Object Key 名稱
    value : ArrayMergeType : (同 arrayMergeTypeDefault 中的 ArrayMergeType)