2012-01-20 2 views
2

이상한 것이 있습니다 (또는 적어도 초보 프로그래머로서 저를 넘어선 것 같습니다).안드로이드 폰에서 배열 정렬이 작동하지 않지만 에뮬레이터와 AIR에서는 작동하지 않습니다

블로그에서 일부 로그인/로그 아웃 데이터를 수집 한 다음 화면에 로그인 이름별로 정렬하여 표시하는 Adobe AIR과 함께 사용하기 전에 제가 작성한 자바 스크립트 앱이 있습니다.

데이터는 시간 소인 순서대로 수신됩니다. 예를 들어 여기에 내 배열로 파싱 한 reterned 데이터의 처음 세 줄이 있습니다. 회선 형식은 타임 스탬프, 이름, 현재 상태, 마지막 상태 변경입니다.

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로 직접 해보려 고하는 지식이 없으므로 모바일 앱을 빌드하고 있으므로이 문제에도 부분적으로 영향을 주는지 확신 할 수 없습니다.

Android 에뮬레이터에서 AIR 응용 프로그램 또는 모바일 버전을 실행하면 출력이 이름별로 그룹화 된 다음 로그인/로그 아웃 세부 정보가 시간순으로 표시됩니다.

하지만 내 모바일 장치 (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 및 안드로이드 에뮬레이터에서 잘 작동한다는 것입니다.

어떤 생각이나 제안이라도 대단히 감사하겠습니다.

감사

답변

0

당신은 아마 (보조 지표로) 배열은 또한 타임 스탬프를 기준으로 정렬되어 있는지 확인해야합니다.

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]); 
} 
+0

감사합니다. 줄리안에게 감사드립니다. 위의 코드를 시도했지만 에뮬레이터에서 날짜를 잘못 정렬했습니다. 그런 다음 타임 스탬프에 정렬에 문제가있는 "at"이 있음을 알았습니다. 그래서 배열을 만들 때 Date.parse를 사용하여 타임 스탬프를 변환 했으므로 괜찮습니다. 도움 주셔서 감사합니다. – rpalmer68

관련 문제