我正在尝试对数组进行排序,包括升序和降序。我似乎无法弄清楚如何正确地做到这一点。我试过不同的方法,但都没有用。这应该发生在我点击两个按钮,一个id为“stigande”升序,另一个id为“fallande”降序。任何解决方案?
Javascript
$(document).ready(function(){
var $films = [];
// ändra bakgrundsfärg för textfield
$('#name').keyup(function(){
$('#name').css('background-color', 'white');
});
// ändra bakgrundsfärg för select lista
$('#options').change(function(){
$('#options').css('background-color', 'white');
});
// kör funktionen när knappen med id button klickas
$("#button").click(function(){
var $titelBetyg = [];
var $titel = $('#name').val();
var $betyg = $('#options').val();
// kontrollera om textfield är tom
if($titel == ""){
$('#name').css('background-color', 'red');
alert("Mata in titel.....");
}
// kontrollera om select lista inte är vald
else if($betyg == "0"){
$('#options').css('background-color', 'red');
alert("Välj betyg....");
}
else{
$titelBetyg.push($titel);
$titelBetyg.push($betyg);
$films.push($titelBetyg);
var $ul = $('#rightbar ul').empty();
if (!$ul.length){ // om ul inte finns
$ul = $("<ul>").appendTo('#rightbar'); // skapa en ny
}
// loopa igenom arrayen och placera innehållet i ul och li
for (var i=0; i<$films.length; i++){
$ul.append("<li>" + $films[i][0] + " " + $films[i][1] + "</li>");
}
$('#form').get(0).reset();
}
});
// kör funktionen när knappen med id stigande klickas
$('#stigande').click(function(a,b){
$films.sort();
});
// kör funktionen när knappen med id fallande klickas
$('#fallande').click(function(){
$films.reverse();
});
});
答案 0 :(得分:4)
当您对数组数组进行排序而不是仅仅排序一系列名称时,您需要为排序做一些稍微不同的事情。
尝试使用以下内容:
function arrSort(arr, subkey){
//Default to 0 if no subkey is set
subkey = (subkey===undefined?0:subkey);
var a = arr.slice(0),
b = [], x;
//For each section in the array, create an array containing whatever we are trying to sort by and our unique ID
for (x in a){
b[x]=[a[x][subkey], x];
}
b=b.sort();
//Wipe out all the data that's currently in arr!
arr.splice(0, arr.length);
for (x in b){
arr.push(a[b[x][1]]);
}
return arr;
}
我相信你想要以$ titel排序,所以你想要实现这样的东西:
// kör funktionen när knappen med id stigande klickas
$('#stigande').click(function(a,b){
arrSort($films, 0);
});
// kör funktionen när knappen med id fallande klickas
$('#fallande').click(function(){
arrSort($films, 0);
$films.reverse();
});