Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Oct 17, 2021. It is now read-only.

Commit 7a1f675

Browse files
author
Jack Chan
committed
feat: simple array and reorder fix
1 parent 02eaf44 commit 7a1f675

File tree

6 files changed

+131
-25
lines changed

6 files changed

+131
-25
lines changed

‎.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
node_modules/
2-
dist
32
coverage
43
npm-debug.log

‎dist/added/index.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
};
6262

6363
var addedDiff = function addedDiff(lhs, rhs) {
64+
var simpleArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
65+
6466

6567
if (lhs === rhs || !(0, _utils.isObject)(lhs) || !(0, _utils.isObject)(rhs)) return {};
6668

@@ -70,15 +72,17 @@
7072
return Object.keys(r).reduce(function (acc, key) {
7173
if (l.hasOwnProperty(key)) {
7274
if (Array.isArray(l[key]) && Array.isArray(r[key])) {
73-
//const allKeys = _.merge(l[key], r[key]) ?? []
7475
var newFields = _lodash2.default.uniq(_lodash2.default.difference(r[key], l[key]));
7576
if (newFields.length === 0) {
7677
return acc;
7778
}
78-
var newFieldsIndex = _lodash2.default.map(newFields, function (o) {
79+
if (simpleArray) {
80+
return _extends({}, acc, _defineProperty({}, key, { after: _lodash2.default.uniq(_lodash2.default.difference(r[key], l[key])) }));
81+
}
82+
var newFieldsIndices = _lodash2.default.map(newFields, function (o) {
7983
return {
8084
content: o,
81-
index: []
85+
indices: []
8286
};
8387
});
8488

@@ -87,16 +91,16 @@
8791
return _lodash2.default.isEqual(o, r[key][i]);
8892
});
8993
if (index !== -1) {
90-
newFieldsIndex[index].index.push(i);
94+
newFieldsIndices[index].indices.push(i);
9195
}
9296
};
9397

9498
for (var i = 0; i < r[key].length; i++) {
9599
_loop(i);
96100
}
97-
return _extends({}, acc, _defineProperty({}, key, { after: newFieldsIndex }));
101+
return _extends({}, acc, _defineProperty({}, key, { after: newFieldsIndices }));
98102
}
99-
var difference = addedDiff(l[key], r[key]);
103+
var difference = addedDiff(l[key], r[key],simpleArray);
100104

101105
if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference)) return acc;
102106

‎dist/deleted/index.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
};
6262

6363
var deletedDiff = function deletedDiff(lhs, rhs) {
64+
var simpleArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
65+
6466
if (lhs === rhs || !(0, _utils.isObject)(lhs) || !(0, _utils.isObject)(rhs)) return {};
6567

6668
var l = (0, _utils.properObject)(lhs);
@@ -73,10 +75,13 @@
7375
if (oldFields.length === 0) {
7476
return acc;
7577
}
76-
var oldFieldsIndex = _lodash2.default.map(oldFields, function (o) {
78+
if (simpleArray) {
79+
return _extends({}, acc, _defineProperty({}, key, { before: _lodash2.default.uniq(_lodash2.default.difference(l[key], r[key])) }));
80+
}
81+
var oldFieldsIndices = _lodash2.default.map(oldFields, function (o) {
7782
return {
7883
content: o,
79-
index: []
84+
indices: []
8085
};
8186
});
8287

@@ -85,16 +90,16 @@
8590
return _lodash2.default.isEqual(o, l[key][i]);
8691
});
8792
if (index !== -1) {
88-
oldFieldsIndex[index].index.push(i);
93+
oldFieldsIndices[index].indices.push(i);
8994
}
9095
};
9196

9297
for (var i = 0; i < l[key].length; i++) {
9398
_loop(i);
9499
}
95-
return _extends({}, acc, _defineProperty({}, key, { before: oldFieldsIndex }));
100+
return _extends({}, acc, _defineProperty({}, key, { before: oldFieldsIndices }));
96101
}
97-
var difference = deletedDiff(l[key], r[key]);
102+
var difference = deletedDiff(l[key], r[key],simpleArray);
98103

99104
if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference)) return acc;
100105

‎dist/detailed/index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@
3030
}
3131

3232
var detailedDiff = function detailedDiff(lhs, rhs) {
33+
var simpleArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
3334
return {
34-
added: (0, _added2.default)(lhs, rhs),
35-
deleted: (0, _deleted2.default)(lhs, rhs),
36-
updated: (0, _updated2.default)(lhs, rhs)
35+
added: (0, _added2.default)(lhs, rhs,simpleArray),
36+
deleted: (0, _deleted2.default)(lhs, rhs,simpleArray),
37+
updated: (0, _updated2.default)(lhs, rhs,simpleArray)
3738
};
3839
};
3940

‎dist/updated/index.js

Lines changed: 106 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
11
(function (global, factory) {
22
if (typeof define === "function" && define.amd) {
3-
define(['module','exports','../utils'], factory);
3+
define(["module","exports","lodash","../utils"], factory);
44
} else if (typeof exports !== "undefined") {
5-
factory(module, exports, require('../utils'));
5+
factory(module, exports, require("lodash"),require("../utils"));
66
} else {
77
var mod = {
88
exports: {}
99
};
10-
factory(mod, mod.exports, global.utils);
10+
factory(mod, mod.exports, global.lodash,global.utils);
1111
global.index = mod.exports;
1212
}
13-
})(this, function (module, exports, _utils) {
14-
'use strict';
13+
})(this, function (module, exports, _lodash,_utils) {
14+
"use strict";
1515

1616
Object.defineProperty(exports, "__esModule", {
1717
value: true
1818
});
1919

20+
var _lodash2 = _interopRequireDefault(_lodash);
21+
22+
function _interopRequireDefault(obj) {
23+
return obj && obj.__esModule ? obj : {
24+
default: obj
25+
};
26+
}
27+
28+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
29+
return typeof obj;
30+
} : function (obj) {
31+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
32+
};
33+
2034
function _defineProperty(obj, key, value) {
2135
if (key in obj) {
2236
Object.defineProperty(obj, key, {
@@ -47,6 +61,8 @@
4761
};
4862

4963
var updatedDiff = function updatedDiff(lhs, rhs) {
64+
var simpleArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
65+
5066

5167
if (lhs === rhs) return {};
5268

@@ -63,10 +79,91 @@
6379
return Object.keys(r).reduce(function (acc, key) {
6480

6581
if (l.hasOwnProperty(key)) {
66-
if (Array.isArray(l[key], r[key])) {
67-
return acc;
82+
if (Array.isArray(l[key]) && Array.isArray(r[key])) {
83+
var _ret = function () {
84+
if (_lodash2.default.isEqual(l[key], r[key])) {
85+
return {
86+
v: acc
87+
};
88+
}
89+
var leftArray = _lodash2.default.cloneDeep(l[key]);
90+
var rightArray = _lodash2.default.cloneDeep(r[key]);
91+
var addedFields = _lodash2.default.uniq(_lodash2.default.difference(r[key], l[key]));
92+
var deletedFields = _lodash2.default.uniq(_lodash2.default.difference(l[key], r[key]));
93+
_lodash2.default.pullAll(leftArray, deletedFields);
94+
_lodash2.default.pullAll(rightArray, addedFields);
95+
if (_lodash2.default.isEqual(leftArray, rightArray) || simpleArray) {
96+
return {
97+
v: acc
98+
};
99+
} else {
100+
var allKeys = _lodash2.default.uniq(rightArray);
101+
var allKeysCounter = _lodash2.default.reduce(allKeys, function (acc, curr) {
102+
return acc[curr] = 0, acc;
103+
}, {});
104+
var allKeysObject = _lodash2.default.reduce(allKeys, function (acc, curr) {
105+
return acc[curr] = [], acc;
106+
}, {});
107+
108+
var _loop = function _loop(i) {
109+
if (!_lodash2.default.isEqual(leftArray[i], rightArray[i])) {
110+
(function () {
111+
var index = _lodash2.default.findIndex(r[key], function (value) {
112+
return _lodash2.default.isEqual(value, rightArray[i]);
113+
});
114+
for (var j = 0; j < allKeysCounter[rightArray[i]]; j++) {
115+
index = _lodash2.default.findIndex(r[key], function (value) {
116+
return _lodash2.default.isEqual(value, rightArray[i], index + 1);
117+
});
118+
}
119+
allKeysObject[rightArray[i]].push({
120+
counter: allKeysCounter[rightArray[i]],
121+
newIndex: index
122+
});
123+
})();
124+
}
125+
allKeysCounter[rightArray[i]] = allKeysCounter[rightArray[i]]++;
126+
};
127+
128+
for (var i = 0; i < leftArray.length; i++) {
129+
_loop(i);
130+
}
131+
var _iteratorNormalCompletion = true;
132+
var _didIteratorError = false;
133+
var _iteratorError = undefined;
134+
135+
try {
136+
for (var _iterator = Object.keys(allKeysObject)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
137+
var _key = _step.value;
138+
139+
if (_lodash2.default.isEmpty(allKeysObject[_key])) {
140+
delete allKeysObject[_key];
141+
}
142+
}
143+
} catch (err) {
144+
_didIteratorError = true;
145+
_iteratorError = err;
146+
} finally {
147+
try {
148+
if (!_iteratorNormalCompletion && _iterator.return) {
149+
_iterator.return();
150+
}
151+
} finally {
152+
if (_didIteratorError) {
153+
throw _iteratorError;
154+
}
155+
}
156+
}
157+
158+
return {
159+
v: _extends({}, acc, _defineProperty({}, key, { after: allKeysObject }))
160+
};
161+
}
162+
}();
163+
164+
if ((typeof _ret === "undefined" ? "undefined" : _typeof(_ret)) === "object") return _ret.v;
68165
}
69-
var difference = updatedDiff(l[key], r[key]);
166+
var difference = updatedDiff(l[key], r[key],simpleArray);
70167

71168
if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference) && !(0, _utils.isDate)(difference)) return acc;
72169

@@ -80,5 +177,5 @@
80177
};
81178

82179
exports.default = updatedDiff;
83-
module.exports = exports['default'];
180+
module.exports = exports["default"];
84181
});

‎package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "deep-object-diff",
3-
"version": "1.1.0",
3+
"version": "1.1.1",
44
"description": "Deep diffs two objects, including nested structures of arrays and objects, and return the difference.",
55
"main": "dist/index.js",
66
"types": "./index.d.ts",

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /