Skip to content

Commit ee19c60

Browse files
author
Piotr Kafel
committed
Merge pull request #9 from pkafel/sort_by_op
Add sort function that prefers ADD over REMOVE
2 parents 33b942f + 0f912ed commit ee19c60

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

json-diff.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function getDiffRepresentation(left, right) {
7272
result.push(new Diff(key, _getInDepthArrayDiff(value, op), op, ARRAY));
7373
}
7474
}
75-
result.sort(function(a,b) {return (a.key > b.key) ? 1 : ((b.key > a.key) ? -1 : 0);} );
75+
result.sort(_sortByKeyAndOp);
7676
return result;
7777
}
7878

@@ -145,10 +145,15 @@ function getDiffRepresentation(left, right) {
145145
}
146146
}
147147

148-
result.sort(function(a,b) {return (a.key > b.key) ? 1 : ((b.key > a.key) ? -1 : 0);} );
148+
result.sort(_sortByKeyAndOp);
149149
return result;
150150
}
151151

152+
function _sortByKeyAndOp(a, b){
153+
if (a.key === b.key) return (a.op === ADD) ? -1 : (a.op === REMOVE) ? 1 : 0;
154+
return a.key > b.key ? 1 : (b.key > a.key) ? -1 : 0;
155+
}
156+
152157
var leftJson = JSON.parse(left);
153158
var rightJson = JSON.parse(right);
154159

test/spec/json-diff-spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,16 @@ describe("Get Json diff representation", function() {
170170
expect(result.diff[0].value[2].value).toEqual(12);
171171
expect(result.diff[0].value[2].key).toEqual("e");
172172
});
173+
174+
it("Diff should be sorted by key and operation", function() {
175+
var result = getDiffRepresentation("{\"a\":1}", "{\"a\":\"1\"}");
176+
177+
expect(result.type).toEqual(OBJECT);
178+
expect(result.diff[0].key).toEqual("a");
179+
expect(result.diff[0].op).toEqual(ADD);
180+
expect(result.diff[0].valueType).toEqual(SCALAR);
181+
expect(result.diff[1].key).toEqual("a");
182+
expect(result.diff[1].op).toEqual(REMOVE);
183+
expect(result.diff[1].valueType).toEqual(SCALAR);
184+
})
173185
});

0 commit comments

Comments
 (0)