0

我正在尝试在将 json 提要插入表格视图之前对其进行排序。我有一个在 iOS 上运行良好的方法,但是当我尝试在 android 上实现相同的代码时,它只会排序一次。

我需要为应用程序对数据进行至少两次排序。

Ti.App.addEventListener('get.stands', function(d) {

        jsonArray = JSON.parse(d.responseText);

        var hockey = jsonArray;

        //alert('Hockey Standings');
        //Ti.API.info('My data is..' + hockey);


        function sortBy(prop) {
            return function(a, b) {
                if (a[prop] > b[prop]) {
                    return -1;
                } else if (a[prop] < b[prop]) {
                    return 1;
                }
                return 0;
            }
            //hockey.sort(sortBy('conference'));
            //hockey.sort(sortBy('points'));
        }

        var data = [];


        hockey.sort(sortBy('points'));
        hockey.sort(sortBy('division'));
        hockey.sort(sortBy('conterence'));
        //myPoints.sort(function(a,b){return a - b;});
        var addRow = function(obj) {
            var teamPoint = parseInt(obj.points);
            var row = Ti.UI.createTableViewRow({
                backgroundColor : '#fff',
                //hasChild : true,
                height : '50dp',
                width : Ti.UI.SIZE
            });

            var myTeam = Ti.UI.createLabel({
                color : '#000',
                font : {
                    fontSize : 16,
                    fontWeight : 'bold'
                },
                height : Ti.UI.SIZE,
                highlightedColor : '#fff',
                left : '55dp',
                top : '0dp',
                text : obj.team,
                width : Ti.UI.SIZE
            });

            var teamPoints = Ti.UI.createLabel({
                color : '#666',
                font : {
                    fontSize : 14
                },
                height : Ti.UI.SIZE,
                highlightedColor : '#ddd',
                left : '55dp',
                top : '20dp',
                text : 'Points: ' + teamPoint.toFixed(0),
                //top: 5,
                width : Ti.UI.SIZE
            });

            var teamImage = Ti.UI.createImageView({
                    image : 'http://www.corliosity.com/json/' + obj.img,
                    left : '0dp',
                    top : '0dp',
                    height: 50,
                    width: 50
            });
                if (obj.conference)
                {
                    row.add(myTeam);
                }
                if (obj.team)
                {
                    row.add(myTeam);
                    row.add(teamPoints);
                    row.add(teamImage); 
                }
            return row;
        };
        var intItem = 0, intItems = hockey.length, strLastDivision = '', row;

        for ( intItem = 0; intItem < intItems; intItem = intItem + 1) {
            var bgcolor = (intItem % 2) ? '#fff' : "#ccc";


            row = addRow(hockey[intItem]);
            if (strLastDivision !== hockey[intItem].division) {
                strLastDivision = hockey[intItem].division;
                row.header = hockey[intItem].division;
            }

            data.push(row);
            row.setBackgroundColor(bgcolor);
        };

        var tbl = Ti.UI.createTableView({
            data : data,
            height : Ti.UI.FILL,
            //minRowHeight: 80,
            //search: search,
            //style : Ti.UI.iPhone.TableViewStyle.GROUPED,
            width : Ti.UI.FILL
        });

        win.add(tbl);

    });

JSON 代码将如下所示

[{"team":"team1", "points":"18", "division":"west","conference":"west"}, {"team":"team2","points":"23","division":"south","conference":"east"}]

提前谢谢你的帮助

4

1 回答 1

0
[{"team":"team1", "points":"18", "division":"west","conference":"west"}, {"team":"team2","points":"23","division":"south","conference":"east"}]

如果这是真正的 JSON 响应,那么您的数字似乎是作为字符串传递的。如果这是正确的,您应该确保比较数字(我不太熟悉 Titanium for Android 的 JS 翻译,也许 Titanium 正在尝试比较字符串。JS 行为有时在 iOS 和 Android 上有所不同)。请参阅parseIntparseFloat功能。下面是一些例子

function sortBy(prop) {
    return function(a, b) {
        if (parseInt(a[prop]) > parseInt(b[prop])) {
            return -1;
        } else if (parseInt(a[prop]) < parseInt(b[prop])) {
            return 1;
        }
        return 0;
    }
}
于 2013-03-17T19:22:51.143 回答