Skip to content

Commit 1eecf6b

Browse files
committed
完善文档
1 parent e45d88b commit 1eecf6b

File tree

1 file changed

+101
-2
lines changed

1 file changed

+101
-2
lines changed

README.md

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,101 @@
1-
# diff
2-
diff
1+
# diffi
2+
可配置的分支对象处理工具。分支的处理基于`tname`/`TYPE`两个内置的类型判断方法,可以基于方法名,在每个方法工具库上进行扩展。
3+
4+
# 安装
5+
6+
```bash
7+
npm i diffi
8+
```
9+
10+
# 内置类型判断
11+
12+
- `tname` 基于`Object.prototype.toString`获取对象构造类名。**此名称第一个字母是大写。**
13+
- `TYPE` 判断两个值的类型。当两个值类型一致时,返回该类型;否则返回`*`
14+
15+
# 分支比较
16+
17+
假设有两个分支集合a、b:
18+
- 当a、b均为`Object`时,若b的`Object.keys`在a中皆具备,并且值相等,此时视b为a的子集。若字段为`Object``Array`,则执行深度检查。
19+
- 当a、b均为`Array`时,若`b.lenght <= a.length`,并且b与a的值及顺序的对应关系一致,此时视b为a的子集。若元素为`Object``Array`,则执行深度检查。
20+
- 其他类型情况,默认以`a === b`判断。
21+
22+
# 模块
23+
24+
## contains
25+
判断一个值是否是另一个值的子集。
26+
27+
```js
28+
console.log('contains', contains({ a: 1, b: 2 }, { a: 1 })) // true
29+
console.log('contains', contains({ a: 1, b: 2 }, { a: 1, b: 2 })) // true
30+
console.log('contains', contains({ a: 1, b: 2 }, { a: 1, b: 3 })) // false
31+
console.log('contains', contains({ a: 1, b: 2 }, { a: 1, b: 2, c: 3 })) // false
32+
console.log('contains', contains([1, 2], [1])) // true
33+
console.log('contains', contains([1, 2], [1, 2])) // true
34+
console.log('contains', contains([1, 2], [1, 3])) // false
35+
console.log('contains', contains([1, 2], [1, 2, 3])) // false
36+
37+
console.log('contains', contains(1, 1)) // true
38+
console.log('contains', contains(1, 2)) // false
39+
```
40+
41+
## clone
42+
深度复制`Object``Array`对象。其他未扩展类型直接返回。
43+
44+
```js
45+
let a = { a: 1, b: 2 };
46+
a.z = a;
47+
let b = { a: 1, b: 3 };
48+
b.z = b;
49+
console.log('clone', clone(a));
50+
// clone { a: 1, b: 2, z: [Circular] }
51+
console.log('clone', clone(b));
52+
// clone { a: 1, b: 3, z: [Circular] }
53+
```
54+
55+
## diff
56+
分支比较,返回分支差异。
57+
```js
58+
console.log('diff', diff([1,2,3], [1,3,3,7]));
59+
// diff [ <1 empty item>, 3, <1 empty item>, 7 ]
60+
console.log('diff', diff({a:1,b:2}, {a:1,b:3}));
61+
// diff { b: 3 }
62+
console.log('diff', diff({a:1,b:2, c: [1,2,3, { a: 111, b: 222 },4]}, {a:1,b:3, c: [2,2,3, { a: 111, c: 333 },4,5]}));
63+
// diff { b: 3, c: [ 2, <2 empty items>, { c: 333 }, <1 empty item>, 5 ] }
64+
```
65+
66+
## intersect
67+
取两个集合差集。该方法依赖`diff`对两个对象的分支差异比较结果。
68+
69+
```js
70+
console.log('intersect', intersect([1,2,3], [1,3,3,7]));
71+
// intersect [ 1, 3, 3, 7 ]
72+
console.log('intersect', intersect({a:1,b:2}, {a:1,b:3}));
73+
// intersect { b: 3 }
74+
console.log('intersect', intersect({a:1,b:2, c: [1,2,3, { a: 111, b: 222 },4]}, {a:1,b:3, c: [2,2,3, { a: 111, c: 333 },4,5]}));
75+
// intersect { b: 3, c: [ 2, 2, 3, { c: 333 }, 4, 5 ] }
76+
```
77+
78+
## assign
79+
分支深度覆盖复制。**该方法将更改第一个参数,并返回第一个参数的指针。**
80+
```js
81+
console.log('assign', assign([1,2,3], [1,3,3,7]));
82+
// assign [ 1, 3, 3, 7 ]
83+
console.log('assign', assign({a:1,b:2}, {a:1,b:3}));
84+
// assign { a: 1, b: 3 }
85+
console.log('assign', assign({a:1,b:2, c: [1,2,3, { a: 111, b: 222 },4]}, {a:1,b:3, c: [2,2,3, { a: 111, c: 333 },4,5]}));
86+
// assign { a: 1, b: 3, c: [ 2, 2, 3, { a: 111, c: 333 }, 4, 5 ] }
87+
```
88+
89+
# 扩展
90+
在每个模块中,都有对应的类型方法集。通过扩展这个集合,可让每个模块对更多类型的对象进行处理。
91+
```js
92+
containsExpand('String', (a, b) => a.indexOf(b) > -1) // 扩展类型处理方法
93+
console.log('contains', contains('abcde', 'bcd')) // true
94+
```
95+
96+
模块扩展方法:
97+
- containsExpand
98+
- cloneExpand
99+
- diffExpand
100+
- intersectExpand
101+
- assignExpand

0 commit comments

Comments
 (0)