Socket
Socket
Sign inDemoInstall

sort-object

Package Overview
Dependencies
Maintainers
2
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sort-object - npm Package Compare versions

Comparing version 0.0.4 to 0.0.5

benchmark.js

5

package.json
{
"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": [

77

sort-object.js

@@ -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);
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc