2012-12-12 39 views
1
var tagged={"tagged":[ 
{"positionX":11,"positionY":13}, 
{"positionX":12,"positionY":18}, 
{"positionX":10,"positionY":20} 
]}; 

因此,我已這個目的,重新排列javascript對象 - 使用的.sort()不保持爲正被排序

我需要,使其最終看起來如下重建它在陣列上的鍵:

var tagged={"tagged":[ 
{"positionX":10,"positionY":20}, 
{"positionX":11,"positionY":13}, 
{"positionX":12,"positionY":18} 
]}; 

按位置X排序ASC。

我曾嘗試:

<script type="text/javascript" src="jquery.min.js"></script> 
<script type="text/javascript"> 
     var tagged={"tagged":[ 
     {"positionX":11,"positionY":13}, 
     {"positionX":12,"positionY":18}, 
     {"positionX":10,"positionY":20} 
     ]}; 

     tagged=tagged.tagged; 

     var newtagged=new Array(); 
     for (var i = 0; i < tagged.length; i++) { 
     newtagged[i]=tagged[i].positionX; 
     } 

     var sorted=newtagged.sort(function(a,b){return a-b}); 

     $(sorted).each(function(k,v){ 
     alert(v); 
     }); 
</script> 

有確實是一個成功的排序,但關鍵是新的「排序」數組中的不正確。

所以我無法檢索原始對象的所有正確的值基於原來的讀鍵,我的意思是,沒有排序的原始密鑰我不知道屬於排序的「positionX」是什麼,這樣我無法檢索其標籤數組中的相應positionY。的.sort(函數(){});將新鍵分配給排序的數組。

+0

'排序= tagged.tagged.slice()排序(功能(A,B){返回a.positionX-b.positionX});' – Bergi

回答

3

如果我正確理解你的問題,你想根據位X的值進行排序標記。如果是這種情況,您可以簡單地傳遞一個函數進行排序來比較屬性。 。

var sorted=tagged.sort(function(a,b){return a.positionX-b.positionX}); 
+0

分選實際上是tagged.tagged陣列上。 – Christophe

+0

@Christophe所以我本來以爲(這是在我的答案的早期版本,如果你看到的歷史:)),但後來我發現'標記= tagged.tagged' –

+0

我覺得標記= tagged.tagged只是失敗的嘗試的一部分。 – Christophe