1

说我有一个:

[“完成”、“待处理”、“忙碌”]

我将如何对其进行排序,以便订单处于忙碌状态、待处理状态、已完成状态?

我将有一个对象列表,每个对象的状态值都是已完成、未决和忙碌。所以可能有100个。

我不确定这是如何工作的,因为它不是按字母顺序或逻辑顺序的,它基于用户偏好。

我希望他们永远是我的顺序。

我使用 javascript 对数组进行排序。

Checksum: "e791e37b19187712fc95078e8fd2b367"
FileLastWriteTimeUtc: "2013/06/07 01:22:40 PM"
FileName: "1.jpg"
PartsSuccess: 0
PartsTotal: 0
Path: "\Image Content Tests"
Size: 4174754
Status: "Done"

谢谢

4

3 回答 3

5

您为每个值分配一个排序顺序。此排序顺序是一个数字,完全取决于您如何制作它们。然后,您按实际要排序的值的排序顺序进行排序。一个例子:

var data = [
    {
        id: 1,
        state: "Pending"
    },
    {
        id: 2,
        state: "Done"
    },
    {
        id: 3,
        state: "Busy"
    }
];

var sortOrders = {
    "Done": 1,
    "Busy": 2,
    "Pending": 3
};

data.sort(function(a, b) {
    return sortOrders[a.state] - sortOrders[b.state];
});

演示:http: //ideone.com/qsz52d

于 2013-06-07T14:20:27.260 回答
0

假设您的对象列表是一个数组,请使用自定义排序函数:

sortMe.sort(function (a, b) {
    var statusA = ['Busy', 'Pending', 'Done'].indexOf(a.Status),
        statusB = ['Busy', 'Pending', 'Done'].indexOf(b.Status);
    return statusA - statusB;
});

sortMe类似于以下内容的位置:

var sortMe = [{
    "Checksum": "e791e37b19187712fc95078e8fd2b367",
    "FileLastWriteTimeUtc": "2013/06/07 01:22:40 PM",
    "FileName": "1.jpg",
    "PartsSuccess": 0,
    "PartsTotal": 0,
    "Path": "\Image Content Tests",
    "Size": 4174754,
    "Status": "Done"
},{
    "Checksum": "e791e37b19187712fc95078e8fd2b367",
    "FileLastWriteTimeUtc": "2013/06/07 01:22:40 PM",
    "FileName": "2.jpg",
    "PartsSuccess": 0,
    "PartsTotal": 0,
    "Path": "\Image Content Tests",
    "Size": 4174754,
    "Status": "Busy"
},{
    "Checksum": "e791e37b19187712fc95078e8fd2b367",
    "FileLastWriteTimeUtc": "2013/06/07 01:22:40 PM",
    "FileName": "3.jpg",
    "PartsSuccess": 0,
    "PartsTotal": 0,
    "Path": "\Image Content Tests",
    "Size": 4174754,
    "Status": "Pending"
}];
于 2013-06-07T14:28:48.010 回答
-1

我假设你有像

[
{
    'name' : 'Sending mail to manager',
    'status': 'pending'
},

{
    'name' : 'Talking to girl friend',
    'status': 'busy'
},

{
    'name' : 'Breakfast',
    'status': 'done'
},
]

我建议你使用underscorejs

_.sortBy(a, function(obj) {
    if (obj.status === 'busy') {
        return 1; 
    } else if (obj.status === 'pending') { 
        return 2; 
    }
    return 3; 
})
于 2013-06-07T14:25:45.787 回答