Member 14859383 Ответов: 2

Как написать функцию, которая сортирует элементы по asc или desc в зависимости от вызываемого параметра?


Я новичок в JavaScript и пытаюсь решить задачу, которая мне пришла в голову. Я хочу написать функцию, которая принимает такой массив:
var array = [{date: '02.01.2017'}, {date: '11.11.2016'}, {date: '12.02.2001'}] 
и сортирует массив в порядке возрастания или убывания в зависимости от вызываемого параметра, я сделал попытку, но она не работает, как я могу создать такую функцию?

Что я уже пробовал:

var arr = [{дата: '02.01.2017'}, {дата: '11.11.2016'}, {дата: '12.02.2001'}];

function compare(array, order) {
array.forEach((item) => {
a = item.date.split('.').reverse().join('');
b = item.date.split('.').reverse().join('');

if (order === 'asc') {
if(a > b) {
return 1
}
}
else if(order === 'desc') {
if(a < b) {
return -1
}
}
});
}

compare([{date: '02.01.2017'}, {date: '11.11.2016'}, {date: '12.02.2001'}], 'asc');

2 Ответов

Рейтинг:
15

Patrice T

Цитата:
Как написать функцию, которая сортирует элементы по asc или desc в зависимости от вызываемого параметра?

Мой самый простой способ-использовать или написать функцию сортировки в порядке возрастания. вы найдете газиллионы алгоритмов и исходного кода в интернете.
И если запрашивается порядок desc, обратный порядок отсортированного массива путем замены элементов массива.


Рейтинг:
1

Richard Deeming

Встроенный sort метод принимает функцию, которая передает два элемента из массива и возвращает значение, указывающее их относительное положение в отсортированном списке.
Array.prototype.sort() - JavaScript | MDN[^]

Вы не можете передать дополнительные параметры этой функции. Но тебе, наверное, не помешало бы закончить разговор.
Закрытие - JavaScript | MDN[^]

Например:

function dateComparer(order){
    return function(left, right) {
        var a = left.date.split('.').reverse().join('');
        var b = right.date.split('.').reverse().join('');
        return order === "asc" ? a.localeCompare(b) : b.localeCompare(a);
    };
}

var arr = [ {date: '02.01.2017'}, {date: '11.11.2016'}, {date: '12.02.2001'} ];
arr.sort(dateComparer('desc'));