sort-object
Advanced tools
Comparing version 1.0.0 to 2.0.0
82
index.js
@@ -12,30 +12,24 @@ /*! | ||
var sortAsc = require('sort-asc'); | ||
var get = require('get-value'); | ||
module.exports = function (obj, options) { | ||
var sort = {desc: sortDesc, asc: sortAsc}; | ||
var fn, opts = {}, keys = Object.keys(obj); | ||
var sortFns = {desc: sortDesc, asc: sortAsc}; | ||
// if `options` is an array, assume it's keys | ||
module.exports = sort; | ||
function sort (obj, options) { | ||
if (Array.isArray(options)) { | ||
opts.keys = options; | ||
options = {}; | ||
// if `options` is a function, assume it's a sorting function | ||
} else if (typeof options === 'function') { | ||
fn = options; | ||
} else { | ||
for (var opt in options) { | ||
if (options.hasOwnProperty(opt)) { | ||
opts[opt] = options[opt] | ||
} | ||
} | ||
options = { keys: options }; | ||
} | ||
// Default sort order is descending | ||
fn = opts.sort || sortDesc; | ||
var opts = options || {}; | ||
var prop = opts.prop; | ||
var getFn = opts.get || get; | ||
var fn = opts.sort || sortDesc; | ||
if (Boolean(opts.sortOrder)) { | ||
fn = sort[opts.sortOrder.toLowerCase()]; | ||
fn = sortFns[opts.sortOrder.toLowerCase()]; | ||
} | ||
var keys = opts.keys || []; | ||
if (Boolean(opts.sortBy)) { | ||
@@ -47,3 +41,2 @@ keys = opts.sortBy(obj); | ||
if (Boolean(opts.keys)) { | ||
keys = opts.keys; | ||
if (!opts.sort && !opts.sortOrder && !opts.sortBy) { | ||
@@ -54,15 +47,48 @@ fn = null; | ||
var tmp = {}; | ||
var sortBy = {}; | ||
var build = keys.length === 0 ? fromObj : fromKeys; | ||
build(obj, keys, tmp, sortBy, function (val, key) { | ||
return prop ? getFn(val, prop) : key; | ||
}); | ||
if (fn) { | ||
keys = keys.sort(fn); | ||
keys.sort(fn); | ||
} | ||
var o = {}; | ||
var len = keys.length; | ||
var i = -1; | ||
var len = keys.length, i = 0, j = 0; | ||
var res = {}, prev; | ||
while (len--) { | ||
var key = keys[i++]; | ||
if (prev !== key) j = 0; | ||
var k = sortBy[key][j++]; | ||
res[k] = tmp[k]; | ||
prev = key; | ||
} | ||
return res; | ||
} | ||
while (++i < len) { | ||
o[keys[i]] = obj[keys[i]]; | ||
// build up the sorting information from the `obj` | ||
function fromObj (obj, keys, tmp, sortBy, fn) { | ||
for (var key in obj) { | ||
var val = obj[key]; | ||
var item = fn(val, key); | ||
sortBy[item] = sortBy[item] || []; | ||
sortBy[item].push(key); | ||
keys.push(item); | ||
tmp[key] = val; | ||
} | ||
} | ||
return o; | ||
}; | ||
// build up the sorting information from the supplied keys | ||
function fromKeys (obj, keys, tmp, sortBy) { | ||
var len = keys.length, i = 0; | ||
while (len--) { | ||
var key = keys[i++]; | ||
var val = obj[key]; | ||
sortBy[key] = sortBy[key] || []; | ||
sortBy[key].push(key); | ||
tmp[key] = val; | ||
} | ||
} |
{ | ||
"name": "sort-object", | ||
"description": "Sort the keys in an object.", | ||
"version": "1.0.0", | ||
"version": "2.0.0", | ||
"homepage": "https://github.com/doowb/sort-object", | ||
@@ -42,2 +42,3 @@ "author": { | ||
"dependencies": { | ||
"get-value": "^1.1.5", | ||
"sort-asc": "^0.1.0", | ||
@@ -44,0 +45,0 @@ "sort-desc": "^0.1.1" |
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
6429
4
75
3
+ Addedget-value@^1.1.5
+ Addedarr-flatten@1.1.0(transitive)
+ Addedget-value@1.3.1(transitive)
+ Addedis-extendable@0.1.1(transitive)
+ Addedlazy-cache@0.2.7(transitive)
+ Addednoncharacters@1.1.0(transitive)