simple-squiggle/node_modules/mathjs/lib/cjs/function/matrix/sort.js

133 lines
3.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createSort = void 0;
var _array = require("../../utils/array.js");
var _factory = require("../../utils/factory.js");
var name = 'sort';
var dependencies = ['typed', 'matrix', 'compare', 'compareNatural'];
var createSort = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
var typed = _ref.typed,
matrix = _ref.matrix,
compare = _ref.compare,
compareNatural = _ref.compareNatural;
var compareAsc = compare;
var compareDesc = function compareDesc(a, b) {
return -compare(a, b);
};
/**
* Sort the items in a matrix.
*
* Syntax:
*
* math.sort(x)
* math.sort(x, compare)
*
* Examples:
*
* math.sort([5, 10, 1]) // returns [1, 5, 10]
* math.sort(['C', 'B', 'A', 'D'], math.compareNatural)
* // returns ['A', 'B', 'C', 'D']
*
* function sortByLength (a, b) {
* return a.length - b.length
* }
* math.sort(['Langdon', 'Tom', 'Sara'], sortByLength)
* // returns ['Tom', 'Sara', 'Langdon']
*
* See also:
*
* filter, forEach, map, compare, compareNatural
*
* @param {Matrix | Array} x A one dimensional matrix or array to sort
* @param {Function | 'asc' | 'desc' | 'natural'} [compare='asc']
* An optional _comparator function or name. The function is called as
* `compare(a, b)`, and must return 1 when a > b, -1 when a < b,
* and 0 when a == b.
* @return {Matrix | Array} Returns the sorted matrix.
*/
return typed(name, {
Array: function Array(x) {
_arrayIsVector(x);
return x.sort(compareAsc);
},
Matrix: function Matrix(x) {
_matrixIsVector(x);
return matrix(x.toArray().sort(compareAsc), x.storage());
},
'Array, function': function ArrayFunction(x, _comparator) {
_arrayIsVector(x);
return x.sort(_comparator);
},
'Matrix, function': function MatrixFunction(x, _comparator) {
_matrixIsVector(x);
return matrix(x.toArray().sort(_comparator), x.storage());
},
'Array, string': function ArrayString(x, order) {
_arrayIsVector(x);
return x.sort(_comparator(order));
},
'Matrix, string': function MatrixString(x, order) {
_matrixIsVector(x);
return matrix(x.toArray().sort(_comparator(order)), x.storage());
}
});
/**
* Get the comparator for given order ('asc', 'desc', 'natural')
* @param {'asc' | 'desc' | 'natural'} order
* @return {Function} Returns a _comparator function
*/
function _comparator(order) {
if (order === 'asc') {
return compareAsc;
} else if (order === 'desc') {
return compareDesc;
} else if (order === 'natural') {
return compareNatural;
} else {
throw new Error('String "asc", "desc", or "natural" expected');
}
}
/**
* Validate whether an array is one dimensional
* Throws an error when this is not the case
* @param {Array} array
* @private
*/
function _arrayIsVector(array) {
if ((0, _array.arraySize)(array).length !== 1) {
throw new Error('One dimensional array expected');
}
}
/**
* Validate whether a matrix is one dimensional
* Throws an error when this is not the case
* @param {Matrix} matrix
* @private
*/
function _matrixIsVector(matrix) {
if (matrix.size().length !== 1) {
throw new Error('One dimensional matrix expected');
}
}
});
exports.createSort = createSort;