Обобщенная функция сортировки массива
Сделайте обобщенную функцию сортировки массива
var persons = [ {name: "Иван", age: 17}, {name: "Мария", age: 35}, {name: "Алексей", age: 73}, {name: "Яков", age: 12}, ] sort(persons, "age"); //сортирует по возрасту по возрастанию sort(persons, "name", false); //сортирует по имени по убыванию Функция позволяет отсортировать любой набор данных по имени поля (второй параметр). Третьим параметром идет необязательный Boolean, который в случае true делает сортировку по возрастанию, в случае false - по убыванию. По умолчанию (без третьего параметра) происходит сортировка по возрастанию. function byField (field) { return function (a, b) { return a[field] > b[field] ? 1 : -1; }; } var users = [{ name: "Вася", surname: 'Иванов', age: 20 }, { name: "Петя", surname: 'Чапаев', age: 25 }, { name: "Маша", surname: 'Медведева', age: 18 }]; byField(); users.sort(byField('age')); users.forEach(function(user) { console.log( user.age); }); Подскажите, здесь можно без метода sort() сделать? |
Цитата:
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Marson,
Сортировка пузырьком, JavaScript |
Обобщённая функция для ассоциативного массива
function byField (field) { return function (a, b) { return a[field] > b[field] ? 1 : -1; }; } var users = [{ name: "Вася", surname: 'Иванов', age: 20 }, { name: "Петя", surname: 'Чапаев', age: 25 }, { name: "Маша", surname: 'Медведева', age: 18 }]; byField(); users.sort(byField('age')); users.forEach(function(user) { console.log( user.age); }); |
Marson,
спасибо Malleys, взято тут https://javascript.ru/forum/misc/758...tml#post498107 <script> function byField(field, order) { var collator = new Intl.Collator(["en", "ru"], { numeric: true }); order = order ? 1 : -1; return function(a, b) { return order * collator.compare(a[field], b[field]) }; } var users = [{ name: "Вася", surname: 'Иванов', age: 20 }, { name: "Петя", surname: 'Чапаев', age: 25 }, { name: "Маша", surname: 'Медведева', age: 18 }]; users.sort(byField('age', true)); users.forEach(function(user) { console.log(user.age); }); </script> |
Спасибо вам!
|
Часовой пояс GMT +3, время: 07:23. |