You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.3 KiB
66 lines
1.3 KiB
/*!
|
|
* sort-keys <https://github.com/helpers/sort-keys>
|
|
*
|
|
* Copyright (c) 2014 Brian Woodward, Jon Schlinkert, contributors.
|
|
* Licensed under the MIT License
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var sortDesc = require('sort-desc');
|
|
var sortAsc = require('sort-asc');
|
|
|
|
|
|
module.exports = function (obj, options) {
|
|
var sort = {desc: sortDesc, asc: sortAsc};
|
|
var fn, opts = {}, keys = Object.keys(obj);
|
|
|
|
// if `options` is an array, assume it's keys
|
|
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]
|
|
}
|
|
}
|
|
}
|
|
|
|
// Default sort order is descending
|
|
fn = opts.sort || sortDesc;
|
|
|
|
if (Boolean(opts.sortOrder)) {
|
|
fn = sort[opts.sortOrder.toLowerCase()];
|
|
}
|
|
|
|
if (Boolean(opts.sortBy)) {
|
|
keys = opts.sortBy(obj);
|
|
fn = null;
|
|
}
|
|
|
|
if (Boolean(opts.keys)) {
|
|
keys = opts.keys;
|
|
if (!opts.sort && !opts.sortOrder && !opts.sortBy) {
|
|
fn = null;
|
|
}
|
|
}
|
|
|
|
if (fn) {
|
|
keys = keys.sort(fn);
|
|
}
|
|
|
|
var o = {};
|
|
var len = keys.length;
|
|
var i = -1;
|
|
|
|
while (++i < len) {
|
|
o[keys[i]] = obj[keys[i]];
|
|
}
|
|
|
|
return o;
|
|
}; |