На ваши вопросы очень сложно ответить, не зная точно причин, по которым вы это делаете!
В любом случае, пытаясь ответить,
1):
Если вы все равно генерируете список в HTML на сервере, и порядок списка не меняется, зачем делать это с JSON & JavaScript? Используйте для этого свою технику на стороне сервера.
Если список изменится, и вы хотите, чтобы что-то в пользовательском интерфейсе на клиенте управляло порядком списка, и у вас есть соображения доступности: создайте свой список и свой JSON, используя технику на стороне сервера, закажите обе стороны сервера а затем визуализируйте свой список HTML и передайте свой JSON клиенту. Это сделает список доступным для клиента (пользователя) без включенного JavaScript, а «сортируемый список» - для клиентов с включенным JavaScript.
Если у вас нет проблем с пользователями без JavaScript, и список необходимо переупорядочить, просто передайте свои данные JSON своему клиенту и используйте JavaScript для их визуализации и обработки переупорядочения.
2) Я предполагаю, что каждый из ваших объектов, которые вы хотите отсортировать, находится в массиве? Если это так, я бы использовал метод Array.sort: www.w3schools.com / jsref / jsref_sort.asp
Что-то вроде следующего должно дать вам представление о том, как это сделать:
var data = [{
"Topic" : "C",
"Examples":[
{"Example" : "Example A one"},
{"Example" : "Example A two"},
]
},{
"Topic" : "B",
"Examples":[
{"Example" : "Example B one"},
{"Example" : "Example B two"},
]
},{
"Topic" : "A",
"Examples":[
{"Example" : "Example C one"},
{"Example" : "Example C two"},
]
}];
function sortTopics(topics, firstItem){
var sortedArray = [];
for (var i = 0; i < topics.length; i++) {
if (topics[i].Topic == firstItem) {
//add the specified first item
sortedArray.push(topics[i]);
//remove element from original
topics.splice(i,1);
break;
}
}
//sort the remainder of the array
topics.sort(function(a,b){
if(a.Topic < b.Topic){return -1;}
if(a.Topic > b.Topic){return 1;}
return 0;
});
//loop though and add each item to the new array
for (var i = 0; i < topics.length; i++) {
sortedArray.push(topics[i]);
}
return sortedArray;
}
sortTopics(data, "C");
Я не уверен, насколько кроссбраузерным он будет, и, очевидно, вам нужно будет сгенерировать список из JSON, но он должен дать вам место для начала, вы, конечно, можете сделать его более универсальным и эффективным!
Удачи.