Сортировка массива не работает на Android Phone, но работает в эмуляторе и AIR - PullRequest
2 голосов
/ 20 января 2012

У меня есть странный (или, по крайней мере, я не начинающий программист).

У меня есть приложение javascript, которое я написал некоторое время назад для использования с Adobe AIR, которое собирает некоторые данные входа / выхода из сервера и затем отображает их на экране по имени входа.

Данные получены в хронологическом порядке; например, вот первые три строки данных с возвратом, которые я затем анализирую в своем массиве. Формат строки: отметка времени, имя, текущий статус, последнее изменение статуса

Wed 1/18/2012 at 2:06 pm, Tanya, offline, Wed 1/18/2012 at 12:04 pm
Wed 1/18/2012 at 2:15 pm, Trav, offline, Wed 1/18/2012 at 2:05 pm
Wed 1/18/2012 at 2:22 pm, Trav, online, Wed 1/18/2012 at 2:15 pm  

Я недавно пересмотрел приложение, чтобы переносить его на мобильные устройства. Обратите внимание, что я использую PhoneGap Build для создания своих мобильных приложений, так как у меня недостаточно знаний, чтобы попытаться сделать это самостоятельно с помощью SDK, поэтому я не уверен, что это также играет роль в проблеме.

Когда я запускаю свое приложение AIR или мобильную версию в эмуляторе Android, мои выходные данные группируются по Имени, а затем данные для входа в систему и выхода из нее являются хронологическими внутри имени.

НО - Когда я запускаю свое приложение на своем мобильном устройстве (HTC Desire HD), выходные данные по-прежнему группируются по имени, но данные под каждым именем по какой-то причине перестают быть в хронологическом порядке и выглядят совершенно случайными.

Ключевые биты кода приведены ниже;

function byName (a, b) {return a[0] == b[0] ? 0 : a[0] < b[0] ? -1 : 1}  


var HistoryArr = new Array();
z = 0;
for (var i = 2; i < myArr.length - 1; i += 4) {
   HistoryArr[z] = new Array(myArr[i+1], myArr[i], myArr[i + 2], myArr[i + 3]);
   z++;
}

HistoryArr.sort(byName);

Я не уверен, стоит ли мне выполнять сортировку по-другому, но меня смущает то, что она отлично работает в AIR и эмуляторе Android просто нет на телефоне.

Так что любые мысли или предложения будут с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 20 января 2012

Возможно, вам нужно убедиться, что ваш массив также отсортирован по временным меткам (как вторичный индекс).

function compare(a, b) { return a == b ? 0 : a < b ? -1 : 1;}

function byNameAndTimestamp (a, b) {
    return a[0] == b[0] ? compare(a[1], b[1]) : compare(a[0], b[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...