2013-06-07 4 views
1

Скажем, у меня есть это:Сортировка объектов по фиксированным значениям

[ «Done», «Ожидание», «Занято»]

Как бы я сортирую, что так что порядок занят, сыгран, сделано?

У меня будет список объектов, каждый со значением состояния выполненных, ожидающих и занятых. Так что может быть 100.

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

Я хочу, чтобы они всегда были моим заказом.

Im с помощью 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" 

Благодаря

+1

Вы можете разместить пример объекта из списка объектов? – pete

+1

вам нужно написать пользовательскую функцию сравнения и использовать ее совместно с функцией 'Array.sort'. Дополнительная информация о функции 'sort': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort –

+0

Добавлен объект, поэтому статус может быть выполнен, занят и ожидается – Harry

ответ

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

+0

Ах, просто. Я думал в этом направлении! Спасибо, это сработает – Harry

-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; 
}) 
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" 
}]; 
Смежные вопросы