38 lines
1.3 KiB
Plaintext
38 lines
1.3 KiB
Plaintext
'use strict';
|
|
|
|
var ArrayCreate = require('es-abstract/2024/ArrayCreate');
|
|
var CompareArrayElements = require('es-abstract/2024/CompareArrayElements');
|
|
var CreateDataPropertyOrThrow = require('es-abstract/2024/CreateDataPropertyOrThrow');
|
|
var IsCallable = require('es-abstract/2024/IsCallable');
|
|
var LengthOfArrayLike = require('es-abstract/2024/LengthOfArrayLike');
|
|
var SortIndexedProperties = require('es-abstract/2024/SortIndexedProperties');
|
|
var ToObject = require('es-abstract/2024/ToObject');
|
|
var ToString = require('es-abstract/2024/ToString');
|
|
|
|
var $TypeError = require('es-errors/type');
|
|
|
|
module.exports = function toSorted(comparefn) {
|
|
if (typeof comparefn !== 'undefined' && !IsCallable(comparefn)) {
|
|
throw new $TypeError('`comparefn` must be a function'); // step 1
|
|
}
|
|
|
|
var O = ToObject(this); // step 2
|
|
var len = LengthOfArrayLike(O); // step 3
|
|
var A = ArrayCreate(len); // step 4
|
|
|
|
// eslint-disable-next-line no-sequences
|
|
var SortCompare = (0, function (x, y) { // step 5
|
|
return CompareArrayElements(x, y, comparefn); // step 5.a
|
|
});
|
|
|
|
var sortedList = SortIndexedProperties(O, len, SortCompare, 'read-through-holes'); // step 6
|
|
|
|
var j = 0; // step 7
|
|
while (j < len) { // step 8
|
|
CreateDataPropertyOrThrow(A, ToString(j), sortedList[j]); // step 8.a
|
|
j += 1; // step 8.b
|
|
}
|
|
|
|
return A; // step 9
|
|
};
|