sort-object
Advanced tools
Comparing version 0.0.4 to 0.0.5
{ | ||
"name": "sort-object", | ||
"description": "Sort the keys in an object", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"homepage": "https://github.com/helpers/sort-object", | ||
@@ -31,3 +31,4 @@ "author": { | ||
"devDependencies": { | ||
"mocha": "~1.13.0" | ||
"mocha": "~1.13.0", | ||
"benchmark": "~1.0.0" | ||
}, | ||
@@ -34,0 +35,0 @@ "keywords": [ |
@@ -10,11 +10,13 @@ /**! | ||
function getKeys(obj) { | ||
return _.keys(obj); | ||
}; | ||
/** | ||
* Custom sort function to allow sorting by descending order | ||
* @param {Object} options optional parameter specifying which order to sort in. | ||
* @param {Object} opts optional parameter specifying which order to sort in. | ||
* @return {Function} function used to pass into a sort function. | ||
*/ | ||
var sortBy = function (options) { | ||
function sortBy(opts) { | ||
var opts = _.extend({ order: 'asc' }, options); | ||
return function (objA, objB) { | ||
@@ -31,2 +33,13 @@ var result = 0; | ||
function sortKeys (obj, opts) { | ||
var keys = []; | ||
var key; | ||
keys = opts.keys(obj); | ||
keys.sort(sortBy(opts)); | ||
return keys; | ||
}; | ||
/** | ||
@@ -40,16 +53,50 @@ * Sorts the ksys on an object | ||
var opts = _.extend({ | ||
order: 'asc' | ||
}, options); | ||
var opts = _.extend({ order: 'asc', property: false, keys: getKeys }, options); | ||
var sorted = {}, | ||
keys = [], | ||
key; | ||
var sorted = {}; | ||
var keys = []; | ||
var key; | ||
keys = _.keys(obj); | ||
keys.sort(sortBy(options)); | ||
if(opts.property && opts.property !== false) { | ||
for (var index in keys) { | ||
key = keys[index]; | ||
sorted[key] = obj[key]; | ||
if(opts.property === true) { | ||
var inverted = _.invert(obj); | ||
keys = sortKeys(inverted, opts); | ||
for (var index in keys) { | ||
key = keys[index]; | ||
sorted[inverted[key]] = key; | ||
} | ||
} else { | ||
var pairs = _.pairs(obj); | ||
var expanded = []; | ||
var keys = {}; | ||
for (var i = 0; i < pairs.length; i++) { | ||
key = pairs[i][1][opts.property]; | ||
keys[key] = pairs[i][0]; | ||
expanded.push(pairs[i][1]); | ||
} | ||
expanded = _.sortBy(expanded, opts.property); | ||
if(opts.order.toLowerCase() === 'desc') { | ||
expanded.reverse(); | ||
} | ||
for (var i = 0; i < expanded.length; i++) { | ||
var value = expanded[i][opts.property]; | ||
sorted[keys[value]] = expanded[i]; | ||
} | ||
} | ||
} else { | ||
keys = sortKeys(obj, opts); | ||
for (var index in keys) { | ||
key = keys[index]; | ||
sorted[key] = obj[key]; | ||
} | ||
} | ||
@@ -56,0 +103,0 @@ |
@@ -53,2 +53,82 @@ /**! | ||
it('should sort the properties on an object', function () { | ||
var outOfOrder = { | ||
'bar': 3, | ||
'foo': 1, | ||
'baz': 2 | ||
}; | ||
var expected = { | ||
'foo': 1, | ||
'baz': 2, | ||
'bar': 3 | ||
}; | ||
var actual = sort(outOfOrder, { property: true }); | ||
assert.deepEqual(expected, actual); | ||
}); | ||
it('should sort the properties on an object in decending order', function () { | ||
var outOfOrder = { | ||
'baz': 3, | ||
'foo': 1, | ||
'bar': 2 | ||
}; | ||
var expected = { | ||
'baz': 3, | ||
'bar': 2, | ||
'foo': 1 | ||
}; | ||
var actual = sort(outOfOrder, { order: 'desc', property: true }); | ||
assert.deepEqual(expected, actual); | ||
}); | ||
it('should sort the objects by their properties', function () { | ||
var outOfOrder = { | ||
'baz': { 'a': 3, 'b': 2, 'c': 1 }, | ||
'foo': { 'a': 1, 'b': 3, 'c': 2 }, | ||
'bar': { 'a': 2, 'b': 1, 'c': 3 } | ||
}; | ||
var expected = { | ||
'foo': { 'a': 1, 'b': 3, 'c': 2 }, | ||
'bar': { 'a': 2, 'b': 1, 'c': 3 }, | ||
'baz': { 'a': 3, 'b': 2, 'c': 1 } | ||
}; | ||
var actual = sort(outOfOrder, { property: 'a' }); | ||
assert.deepEqual(expected, actual); | ||
}); | ||
it('should sort the objects by their properties on an object in decending order', function () { | ||
var outOfOrder = { | ||
'baz': { 'a': 3, 'b': 2, 'c': 1 }, | ||
'foo': { 'a': 1, 'b': 3, 'c': 2 }, | ||
'bar': { 'a': 2, 'b': 1, 'c': 3 } | ||
}; | ||
var expected = { | ||
'baz': { 'a': 3, 'b': 2, 'c': 1 }, | ||
'bar': { 'a': 2, 'b': 1, 'c': 3 }, | ||
'foo': { 'a': 1, 'b': 3, 'c': 2 } | ||
}; | ||
var actual = sort(outOfOrder, { order: 'desc', property: 'a' }); | ||
assert.deepEqual(expected, actual); | ||
}); | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
8593
8
215
0
2