Прежде чем перейти к рассмотрению метода .sort, необходимо хотябы несколько слов сказать о функциях, используемых в JavaScript и Google Apps Script.
Higher-order functions (Функции более высокого порядка) - называются функции, использующие в качестве аргументов и/или возвращаемых объектов функции первого класса. (Пример - функция .sort)
First-class functions (Функции первого класса) используются в качестве аргументов и/или возвращаемых объектов для функций более высокого порядка. (Пример - функции, являющиеся аргументами для функции .sort)
const arr = [1, 2, 3, 10, 20];
// ========== Higher-order functions ===============
//arr.sort(sortFunction)
// ========== First-class functions ================
// function definition
function twoTimes(x) {
return x * 2;
};
// another function definition
var twice;
twice = function(x) {return x * 2};
// arrow function
twice = (x) => x * 2;
// arrow function with 1 argument
twice = x => x * 2;
console.log(twice(3));
console.log(typeof twice);
// 1.) function as argument another function
var fourTimes = (x, twice) => twice(x);
console.log(fourTimes(3, twice)); // 6
// 2.) return function
var fourTimes = (x) => x * 4;
var xTimes = (x, order) => {
if (x / order == 4) {
return fourTimes;
} else if (x / order == 2) {
return twice;
};
};
var y = xTimes(12, 3); // 8
console.log(y(2)); // =6
console.log('y is ' + typeof y); // y is function
// numbers sorting
const arr = [1, 2, 10, 20];
arr.sort((a, b) => a - b); // [ 20, 10, 2, 1 ]
arr.sort((a, b) => b - a); // [ 1, 2, 10, 20 ]
// string sorting
const arr1 = ['a', 'b', 'A', 'B', 'г', 'Г', 'д', 'Д'];
arr1.sort(); // [ 'A', 'B', 'a', 'b', 'Г', 'Д', 'г', 'д' ]
arr1.sort((a, b) => a.localeCompare(b)); // [ 'a', 'A', 'b', 'B', 'г', 'Г', 'д', 'Д' ]
arr1.sort((a, b) => b.localeCompare(a)); // [ 'Д', 'д', 'Г', 'г', 'B', 'b', 'A', 'a' ]
// 2-dimensional array
var arr_2 = [[1, 5, 6],
[3, 7, 9],
[9, 2, 1]];
arr_2.sort((a, b) => b[1] - a[1]); // [ [ 3, 7, 9 ],
// [ 1, 5, 6 ],
// [ 9, 2, 1 ] ]
// JSON objects
var actors = [
{name: 'Dwayne Johnson', income: 89.4},
{name: 'Chris Hemsworth', income: 76.4},
{name: 'Robert DowneyJr.', income: 66},
{name: 'Akshay Kumar', income: 65},
{name: 'Jackie Chan', income: 58},
];
actors.sort((a, b) => a.income - b.income);
//[ { name: 'Jackie Chan', income: 58 },
// { name: 'Akshay Kumar', income: 65 },
// { name: 'Robert DowneyJr.', income: 66 },
// { name: 'Chris Hemsworth', income: 76.4 },
// { name: 'Dwayne Johnson', income: 89.4 } ]
actors.sort((a, b) => a.name.localeCompare(b.name));
// [ { name: 'Akshay Kumar', income: 65 },
// { name: 'Chris Hemsworth', income: 76.4 },
// { name: 'Dwayne Johnson', income: 89.4 },
// { name: 'Jackie Chan', income: 58 },
// { name: 'Robert DowneyJr.', income: 66 } ]
Дополнительную информацию вы можете найти в этом видео: