ubdate
This commit is contained in:
44
node_modules/default-compare/index.js
generated
vendored
Normal file
44
node_modules/default-compare/index.js
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
'use strict';
|
||||
|
||||
var typeOf = require('kind-of');
|
||||
|
||||
/**
|
||||
* Basic sort algorithm that has similar behavior to `Array.prototype.sort`
|
||||
* for null and undefined, but also allows sorting by an object property.
|
||||
*
|
||||
* @param {Mixed} `a` First value to compare.
|
||||
* @param {Mixed} `b` Second value to compare.
|
||||
* @param {String} `prop` Optional property to use when comparing objects. If specified must be a string.
|
||||
* @return {Number} Returns 1 when `a` should come after `b`, -1 when `a` should come before `b`, and 0 when `a` and `b` are equal.
|
||||
* @api public
|
||||
*/
|
||||
|
||||
module.exports = function defaultCompare(a, b, prop) {
|
||||
if (prop != null && typeOf(prop) !== 'string') {
|
||||
throw new TypeError('expected "prop" to be undefined or a string');
|
||||
}
|
||||
|
||||
var typeA = typeOf(a);
|
||||
var typeB = typeOf(b);
|
||||
|
||||
if (prop) {
|
||||
if (typeA === 'object') {
|
||||
a = a[prop];
|
||||
typeA = typeOf(a);
|
||||
}
|
||||
if (typeB === 'object') {
|
||||
b = b[prop];
|
||||
typeB = typeOf(b);
|
||||
}
|
||||
}
|
||||
|
||||
if (typeA === 'null') {
|
||||
return typeB === 'null' ? 0 : (typeB === 'undefined' ? -1 : 1);
|
||||
} else if (typeA === 'undefined') {
|
||||
return typeB === 'null' ? 1 : (typeB === 'undefined' ? 0 : 1);
|
||||
} else if (typeB === 'null' || typeB === 'undefined') {
|
||||
return -1;
|
||||
} else {
|
||||
return a < b ? -1 : (a > b ? 1 : 0);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user