【问题标题】:Array sort not working on Android Phone but does in emulator and AIR数组排序不适用于 Android 手机,但适用于模拟器和 AIR
【发布时间】:2012-02-15 00:28:57
【问题描述】:

我有一个奇怪的东西(或者至少作为一个新手程序员,它超出了我的能力范围)。

我前段时间编写了一个用于 Adob​​e AIR 的 javascript 应用程序,它从服务器收集一些登录/注销数据,然后在屏幕上按登录名排序显示。

数据按时间戳时间顺序接收;例如,这里是我然后解析到我的数组中的前三行数据。行格式为时间戳、名称、当前状态、上次状态变化

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 中运行良好,而 android 模拟器却不能在手机上运行。

因此,任何想法或建议将不胜感激。

谢谢

【问题讨论】:

    标签: javascript android arrays sorting cordova


    【解决方案1】:

    您可能需要确保您的数组也按时间戳排序(作为二级索引)。

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

    【讨论】:

    • 感谢 Julian,我在上面尝试了您的代码,但后来我的模拟器也错误地对日期进行了排序。然后我意识到时间戳中有一个“at”,这可能会导致排序问题。所以我在构建数组时使用 Date.parse 转换了时间戳,现在它的排序很好。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多