Дата сортировки с массивом не работает на IOS - PullRequest
0 голосов
/ 03 января 2019

Итак, я получаю данные со своего собственного сервера и устанавливаю данные в переменную с именем: items.

Поэтому всякий раз, когда я делаю:

 if (this.items) {
                    this.items.sort(function (a, b) {
                        return +new Date(b.datum) - +new Date(a.datum);
                    });
                }

на windows и android он сортирует мой массив, но всякий раз, когда я пробую это на яблочном продукте, таком как iphone, он не сортируется по дате, поэтому я серьезно не понимаю, как?

Ответы [ 4 ]

0 голосов
/ 01 марта 2019

Я думаю, что это проблема формата даты. IE и Safari поддерживает определенные форматы дат. Ссылка для получения подробной информации http://biostall.com/javascript-new-date-returning-nan-in-ie-or-invalid-date-in-safari/

Для меня формат был следующим: "2015-11-07T15: 04: 46 + 0100" Этот формат отлично работает в браузере Chrome. Но для iOS мне пришлось удалить последние 5 символов, т. Е. «2015-11-07T15: 04: 46», чтобы он работал.

0 голосов
/ 03 января 2019
let items = [
    { datum: 100, other: "..." },
    { datum: 105, other: "..." },
    { datum: 120, other: "..." },
    { datum: 130, other: "..." },
    { datum: 102, other: "..." }
];
console.log(JSON.stringify(items));
items.sort(function (a,b) {
    return a.datum - b.datum;
});

console.log(JSON.stringify(items));

Это прекрасно работает для меня.

0 голосов
/ 11 января 2019

У меня была такая же проблема, и я решил ее, используя метод, описанный ниже:

Замените пробел на "T" в вашем значении даты перед сортировкой

    this.messages = this.messages.map(m=>{
      let datum = m.datum.toString().replace(" ","T");
      m.datum = datum;
      return m;
    })
0 голосов
/ 03 января 2019

Способ сортировки работает путем вычитания значения двух последовательных элементов (a, b) массива. если результат (a - b) отрицателен, то это означает, что b больше, чем a, поэтому порядок меняется и так далее.

Это означает, что вам нужно убедиться, что вы вычитаете числа. Вот пример:

this.items.sort(function (a, b) {
    const dateA = new Date(a.datum);
    const dateB = new Date(b.datum);
    return dateB.getTime() - dateA.getTime();
});

Это отсортирует ваш массив по убыванию. метод getTime возвращает временную метку, которая идеально подходит для расчетов. Однако, если ваша дата уже является временной меткой, и вам не нужно создавать объекты Date, вы можете вычесть их непосредственно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...