Javascript: сортировка массивов, содержащих даты, в порядке убывания - PullRequest
4 голосов
/ 30 мая 2011

У меня есть следующий массив:

var times = [
            ["04/11/10", "86kg"], 
            ["05/12/11", "90kg"],
            ["06/12/11", "89kg"]
];

Я хочу перечислить эти даты и соответствующие им веса в порядке возрастания.

Я знаю, что вы можете сортировать массивы с помощью sort , и я нашел следующую функцию из этой страницы About.com , которая, я думал, будет делать то, что я хотел:

times.sort(dmyOrdA);
var dateRE = /^(\d{2})[\/\-](\d{2})[\/\-](\d{2})/;
function dmyOrdA(a,b) {
    a = a.replace(dateRE, "$3$2$1");
    b = b.replace(dateRE, "$3$2$1");

    if (a > b) {
        return 1;
    }

    else if (a < b) {
        return -1;
    }

    else {
        return 0;
    }
}

Однако использование этой функции приводит к следующей ошибке:

a.replace is not a function

Кто-нибудь может помочь с моим запросом?

Заранее спасибо.

EDIT:

Глядя на предыдущий вопрос переполнения стека , мне кажется, что в моем случае 'a' не является строкой. Однако я не понимаю, почему это так.

Ответы [ 2 ]

3 голосов
/ 30 мая 2011

при сортировке массива параметры, принимаемые функцией sort, являются элементами массива.
В вашем случае ваши элементы массива также являются массивами ... bummer.
Вы хотите отсортировать массив массивов по первому элементу каждого элемента (хитро).
Так что просто измените a и b на a[0] и b[0]:

function dmyOrdA(a,b) {
    a = a[0].replace(dateRE, "$3$2$1");
    b = b[0].replace(dateRE, "$3$2$1");
    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    else
        return 0;
}

Вы получили a.replace is not a function, потому что замена - это метод String, и вы пытались применить его к Array

0 голосов
/ 30 мая 2011

Вы должны преобразовать в правильные даты и затем вычесть в функции сравнения:

function dmyOrdA(a,b){return myDate(a[0]) - myDate(b[0]);}
function myDate(s){var a=s.split("/"); return new Date("20"+a[2],a[1]-1,a[0]);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...