luci-base: luci.js: add array sort utilities
Add two new utility functions L.naturalCompare() and L.sortedArray() to simplify sorting arrays naturally. Ref: #5899 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
26afb7cbec
commit
8199b2ce9a
1 changed files with 45 additions and 6 deletions
|
@ -2220,6 +2220,8 @@
|
|||
view: View
|
||||
};
|
||||
|
||||
var naturalCompare = new Intl.Collator(undefined, { numeric: true }).compare;
|
||||
|
||||
var LuCI = Class.extend(/** @lends LuCI.prototype */ {
|
||||
__name__: 'LuCI',
|
||||
__init__: function(setenv) {
|
||||
|
@ -2965,17 +2967,54 @@
|
|||
}).filter(function(e) {
|
||||
return (e[1] != null);
|
||||
}).sort(function(a, b) {
|
||||
if (a[1] < b[1])
|
||||
return -1;
|
||||
else if (a[1] > b[1])
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
return naturalCompare(a[1], b[1]);
|
||||
}).map(function(e) {
|
||||
return e[0];
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Compares two values numerically and returns -1, 0 or 1 depending
|
||||
* on whether the first value is smaller, equal to or larger than the
|
||||
* second one respectively.
|
||||
*
|
||||
* This function is meant to be used as comparator function for
|
||||
* Array.sort().
|
||||
*
|
||||
* @type {function}
|
||||
*
|
||||
* @param {*} a
|
||||
* The first value
|
||||
*
|
||||
* @param {*} b
|
||||
* The second value.
|
||||
*
|
||||
* @return {number}
|
||||
* Returns -1 if the first value is smaller than the second one.
|
||||
* Returns 0 if both values are equal.
|
||||
* Returns 1 if the first value is larger than the second one.
|
||||
*/
|
||||
naturalCompare: naturalCompare,
|
||||
|
||||
/**
|
||||
* Converts the given value to an array using toArray() if needed,
|
||||
* performs a numerical sort using naturalCompare() and returns the
|
||||
* result. If the input already is an array, no copy is being made
|
||||
* and the sorting is performed in-place.
|
||||
*
|
||||
* @see toArray
|
||||
* @see naturalCompare
|
||||
*
|
||||
* @param {*} val
|
||||
* The input value to sort (and convert to an array if needed).
|
||||
*
|
||||
* @return {Array<*>}
|
||||
* Returns the resulting, numerically sorted array.
|
||||
*/
|
||||
sortedArray: function(val) {
|
||||
return this.toArray(val).sort(naturalCompare);
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts the given value to an array. If the given value is of
|
||||
* type array, it is returned as-is, values of type object are
|
||||
|
|
Loading…
Reference in a new issue