2012-08-26 64 views
1

我正在學習JavaScript,無法找出下面我的代碼中的問題。我想我誤解了數組是如何工作的。排序數組的問題

問題是,警報數組實際上沒有排序。我會很感激這方面的任何見解:

Here is a ready jsFiddle

HTML:

<html> 
    <head> 
    <title> 
     Test 1 
    </title> 
    <script src="http://code.jquery.com/jquery-latest.js" type= 
    "text/javascript"> 
</script> 
    </head> 
    <body> 
    <div class="items"> 
     <ul> 
     <li> 
      <a href="#" id="1">Link 1</a> 
     </li> 
     <li> 
      <a href="#" id="2">Link 2</a> 
     </li> 
     <li> 
      <a href="#" id="3">Link 3</a> 
     </li> 
     <li> 
      <a href="#" id="4">Link 4</a> 
     </li> 
     </ul> 
    </div> 
</body> 
</html> 

的Javascript:

var clickedLinks = []; 
var passedItems = []; 


// Collect clicked link IDs into an array and pass the array as an argument to shoplist() 
$('.items a').click(function() { 

if (clickedLinks.indexOf(this.id) != -1) { 
    var linkIndex = clickedLinks.indexOf(this.id); 
    clickedLinks.splice(linkIndex, 1); 
} else { 
    clickedLinks.push(this.id); 
} 

shoplist(clickedLinks); 

}); 


function shoplist(ids) { 
    passedItems.push(ids.slice()); 
    alert(passedItems.sort()); 
} 

重現步驟:

  1. 單擊鏈接2
  2. 單擊鏈接1

預期結果: 1,2,2

實際結果: 2,2,1

事情我已經嘗試:

function shoplist(ids) { 
    passedItems.push(ids.slice()); 
    var newpi = passedItems.slice(); 
    alert(newpi.sort()); 
    } 
+0

您有一個數組的陣列。嘗試不推送到傳遞的項目,但只排序點擊鏈接 – mplungjan

回答

1

要添加數組,結果爲ids.slice(),到另一個數組。這就是爲什麼這種排序不符合你的期望。使用concat相反,如果你想的ids內容添加到passedItems陣列:而不是添加一個字符串ids陣列

passedItems = passedItems.concat(ids); 

此外,你應該使用.push(parseInt(this.id))代替,然後使用:

passedItems.sort(function (a, b) { 
    return a - b; 
}); 
+0

如果我沒有錯,sort()方法將總是按字母順序排序,無論你傳遞的是整數還是字符串。要進行數值排序,您需要將排序函數作爲參數傳遞,請參閱http://stackoverflow.com/a/12133066/932210 – finspin

2

我想你'重新使用了sort function錯誤。如果你想使用數字排序功能,你必須包括一個排序功能。如果你想的東西數字排序,你應該使用這個功能(在提供的鏈接):

(function(a,b){return a-b}); 

所以在您的情況爲newpi它是這樣的:

newpi.sort(function(a,b){return a-b});