Skip to content

Commit 6f9a27b

Browse files
committed
New : Json array support
1 parent 26b0e90 commit 6f9a27b

File tree

5 files changed

+1719
-27
lines changed

5 files changed

+1719
-27
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ Output will be -
5454

5555
### Versions
5656

57+
+ `v1.2.0`
58+
+ Improvement : json array support
5759
+ `v1.1.0`
5860
+ Bug Fixed : descending sort fix
5961
+ Improvement: auto build testing via travis-ci

index.js

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,14 @@ OR PERFORMANCE OF THIS SOFTWARE.
2222
*/
2323
const typeOf = function (data) {
2424
const objectConstructor = {}.constructor;
25+
const arrayConstructor = [].constructor;
26+
const stringConstructor = 'test'.constructor;
2527
if (data && data !== null && data.constructor === objectConstructor) {
2628
return "OBJECT";
29+
} else if (data && data !== null && data.constructor === arrayConstructor) {
30+
return "ARRAY";
31+
} else if (data && data !== null && data.constructor === stringConstructor) {
32+
return "STRING";
2733
} else {
2834
return "";
2935
}
@@ -39,30 +45,51 @@ const typeOf = function (data) {
3945
* @return {{}} - a sorted json object
4046
*/
4147
function jsonSort(data, sort) {
42-
var newKeys = [],
43-
keys,
44-
newData = {};
48+
if (typeOf(data) === "ARRAY") {
49+
let newData = [];
50+
for (let w = 0; w < data.length; w++) {
51+
let d = data[w];
52+
if (typeOf(d) === "OBJECT" || typeOf(d) === "ARRAY")
53+
newData.push(jsonSort(d, sort));
54+
else
55+
newData.push(d)
56+
}
57+
return newData
58+
} else {
59+
let newKeys = [],
60+
keys,
61+
newData = {};
4562

46-
if (sort === undefined)
47-
sort = true;
63+
if (sort === undefined)
64+
sort = true;
4865

49-
keys = Object.keys(data).sort();
66+
keys = Object.keys(data).sort();
5067

51-
if (!sort) {
52-
for (var i = keys.length - 1; i >= 0; i--)
53-
newKeys.push(keys[i])
54-
keys = newKeys
55-
}
68+
if (!sort) {
69+
for (let i = keys.length - 1; i >= 0; i--)
70+
newKeys.push(keys[i])
71+
keys = newKeys
72+
}
5673

57-
for (var j = 0; j < keys.length; j++) {
58-
var key = keys[j];
59-
if (typeOf(data[key]) === "OBJECT")
60-
newData[key] = jsonSort(data[key], sort);
61-
else
62-
newData[key] = data[key]
63-
}
74+
for (let j = 0; j < keys.length; j++) {
75+
let key = keys[j];
76+
if (typeOf(data[key]) === "OBJECT")
77+
newData[key] = jsonSort(data[key], sort);
78+
else if (typeOf(data[key]) === "ARRAY") {
79+
newData[key] = [];
80+
for (let k = 0; k < data[key].length; k++) {
81+
let d = data[key][k];
82+
if (typeOf(d) === "OBJECT" || typeOf(d) === "ARRAY")
83+
newData[key].push(jsonSort(data[key][k], sort));
84+
else
85+
newData[key].push(data[key][k])
86+
}
87+
} else
88+
newData[key] = data[key]
89+
}
6490

65-
return newData
91+
return newData
92+
}
6693
}
6794

6895
// exporting with name as sort

index.test.js

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ describe('asc & desc tests', () => {
204204
describe('1. sorting json with no nesting', () => {
205205
let sorted;
206206
before(() => {
207-
sorted = index.sort(json0,false);
207+
sorted = index.sort(json0, false);
208208
});
209209
it('should have 4 keys', function () {
210210
Object.keys(sorted).should.have.lengthOf(4)
@@ -220,7 +220,7 @@ describe('asc & desc tests', () => {
220220
describe('2. sorting json with single nested key', () => {
221221
let sorted;
222222
before(() => {
223-
sorted = index.sort(json1,false)
223+
sorted = index.sort(json1, false)
224224
});
225225
it('should have 4 keys', function () {
226226
Object.keys(sorted).should.have.lengthOf(4)
@@ -248,7 +248,7 @@ describe('asc & desc tests', () => {
248248
describe('3. sorting json with 2 nesting in a key', () => {
249249
let sorted;
250250
before(() => {
251-
sorted = index.sort(json2,false)
251+
sorted = index.sort(json2, false)
252252
});
253253
it('should have 4 keys', function () {
254254
Object.keys(sorted).should.have.lengthOf(4)
@@ -288,7 +288,7 @@ describe('asc & desc tests', () => {
288288
describe('4. sorting json with 3 nesting in a key', () => {
289289
let sorted;
290290
before(() => {
291-
sorted = index.sort(json3,false)
291+
sorted = index.sort(json3, false)
292292
});
293293
it('should have 4 keys', function () {
294294
Object.keys(sorted).should.have.lengthOf(4)
@@ -337,4 +337,50 @@ describe('asc & desc tests', () => {
337337
});
338338
});
339339
});
340+
});
341+
342+
describe('json array tests', () => {
343+
344+
describe('sorting json array with json object', () => {
345+
346+
let array = [
347+
{
348+
zebra: 1,
349+
apple: 2
350+
},
351+
{
352+
yellow: {
353+
goat: 6,
354+
boy: 8
355+
},
356+
goat: [
357+
{
358+
dear: 3,
359+
abe: 4
360+
}
361+
]
362+
}
363+
];
364+
let result;
365+
366+
before(() => {
367+
result = index.sort(array)
368+
});
369+
370+
it('expect object 0 key 0 to be apple', function () {
371+
expect(Object.keys(result[0])[0]).to.be.equal("apple")
372+
});
373+
374+
it('expect object 1.1 key 0 to be boy', function () {
375+
let key = Object.keys(result[1])[1];
376+
let obj = result[1][key];
377+
expect(Object.keys(obj)[0]).to.be.equal("boy")
378+
});
379+
380+
it('expect object 1.0 [0] key 0 to be abe', function () {
381+
let key = Object.keys(result[1])[0];
382+
let obj = result[1][key];
383+
expect(Object.keys(obj[0])[0]).to.be.equal("abe")
384+
});
385+
})
340386
});

0 commit comments

Comments
 (0)