1 | var _curry2 =
|
2 |
|
3 | require("./internal/_curry2");
|
4 |
|
5 | var _isInteger =
|
6 |
|
7 | require("./internal/_isInteger");
|
8 |
|
9 | var _isArray =
|
10 |
|
11 | require("./internal/_isArray");
|
12 |
|
13 | var assoc =
|
14 |
|
15 | require("./assoc");
|
16 |
|
17 | var dissoc =
|
18 |
|
19 | require("./dissoc");
|
20 |
|
21 | var remove =
|
22 |
|
23 | require("./remove");
|
24 |
|
25 | var update =
|
26 |
|
27 | require("./update");
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | var dissocPath =
|
50 |
|
51 | _curry2(function dissocPath(path, obj) {
|
52 | switch (path.length) {
|
53 | case 0:
|
54 | return obj;
|
55 |
|
56 | case 1:
|
57 | return _isInteger(path[0]) && _isArray(obj) ? remove(path[0], 1, obj) : dissoc(path[0], obj);
|
58 |
|
59 | default:
|
60 | var head = path[0];
|
61 | var tail = Array.prototype.slice.call(path, 1);
|
62 |
|
63 | if (obj[head] == null) {
|
64 | return obj;
|
65 | } else if (_isInteger(head) && _isArray(obj)) {
|
66 | return update(head, dissocPath(tail, obj[head]), obj);
|
67 | } else {
|
68 | return assoc(head, dissocPath(tail, obj[head]), obj);
|
69 | }
|
70 |
|
71 | }
|
72 | });
|
73 |
|
74 | module.exports = dissocPath; |
\ | No newline at end of file |