3-way-diff 中文文档教程
3-way-diff
https://github.com/lodash/lodash/blob/master/lodash.js#L11220 注意:该方法支持比较数组、数组缓冲区、布尔值、 日期对象、错误对象、地图、数字、Object
对象、正则表达式、 集合、字符串、符号和类型化数组。 Object
对象进行比较 通过他们自己的,而不是继承的,可枚举的属性。 函数和 DOM 不 支持节点。
返回对象的结构松散地基于 https://github.com/flitbit/diff
一些比较基于 https://github.com/falsecz/3-way-merge/blob/master/test/test.coffee
Concestor来自 https://github.com/dominictarr/xdiff
Differences
差异被报告为一个或多个更改记录。 更改记录具有以下结构:
kind
- indicates the kind of change; will be one of the following:N
- indicates a newly added property/elementD
- indicates a property/element was deletedE
- indicates a property/element was editedC
- indicates a conflicting change was made to both mine and theirs
path
- the property path (from the parent)parent
- the value on parenttheirs
- the value on theirs (undefined if kind === 'N')mine
- the value on mine (undefined if kind === 'D')
Options
Options 对象可用于表示某些标志。 对象应该是 mine
的副本,在特定键上设置了标志
Example
Mine:
{
key1: {
childKey1: {
key: value
},
childKey2: value
},
key2: {
childKey1: value
}
}
Options:
{
key1: {
childKey1: {
ignoreKey: true
},
ignoreOrder: true,
},
key2: {
ignoreKey: true
}
}
Flags
ignoreKey
- Do not diff this keyignoreOrder
- Compares arrays without maintaining orderfalsy
- Allow values to be compared as falsy (0, '', false, undefined, NaN and null are equal)
3-way-diff
https://github.com/lodash/lodash/blob/master/lodash.js#L11220 Note: This method supports comparing arrays, array buffers, booleans, date objects, error objects, maps, numbers, Object
objects, regexes, sets, strings, symbols, and typed arrays. Object
objects are compared by their own, not inherited, enumerable properties. Functions and DOM nodes are not supported.
Structure of return object is loosely based on https://github.com/flitbit/diff
Some comparison is based on https://github.com/falsecz/3-way-merge/blob/master/test/test.coffee
Concestor comes from https://github.com/dominictarr/xdiff
Differences
Differences are reported as one or more change records. Change records have the following structure:
kind
- indicates the kind of change; will be one of the following:N
- indicates a newly added property/elementD
- indicates a property/element was deletedE
- indicates a property/element was editedC
- indicates a conflicting change was made to both mine and theirs
path
- the property path (from the parent)parent
- the value on parenttheirs
- the value on theirs (undefined if kind === 'N')mine
- the value on mine (undefined if kind === 'D')
Options
Options object can be used to denote certain flags. Object should be replica of mine
with flags set on specific keys
Example
Mine:
{
key1: {
childKey1: {
key: value
},
childKey2: value
},
key2: {
childKey1: value
}
}
Options:
{
key1: {
childKey1: {
ignoreKey: true
},
ignoreOrder: true,
},
key2: {
ignoreKey: true
}
}
Flags
ignoreKey
- Do not diff this keyignoreOrder
- Compares arrays without maintaining orderfalsy
- Allow values to be compared as falsy (0, '', false, undefined, NaN and null are equal)