2012-01-22 69 views
1

我想我的排序陣列locations上的訪問元素從短到用下面的代碼最長的距離:Jquery-的關聯方式索引陣列

for(var i=0; i<locations.length;i++) 
{ 
    var swapped = false; 
    for(var j=locations.length; j>i+1;j--) 
    { 
     if (locations[j]['distance'] < locations[j-1]['distance']) 
     { 
      var temp = locations[j-1]; 
      locations[j-1]=locations[j]; 
      locations[j]=temp; 
      swapped = true; 
     } 
    } 
    if(!swapped) 
     break; 
} 

當我試圖運行的程序,我得到以下錯誤螢火蟲:

locations[j] is undefined 

我console.logged的位置排列,這就是它lloks像:

[Object { id="1", marker=U, more...}, Object { id="4", marker=U, more...}, Object { id="6", marker=U, more...}, Object { id="3", marker=U, more...}, Object { id="2", marker=U, more...}, Object { id="5", marker=U, more...}] 

有沒有一種方法來在數字上索引對象,同時保持對象的數據關聯索引?

或者有沒有辦法訪問第i + 1或ith-1元素,如果我有在foreach循環中使用this.distance?

+0

寫循環爲(var j = locations.length-1; j> i; j--) –

回答

0

你開始1晚,記住數組鍵索引,這開始於0

for(var j=locations.length-1; j>i+1;j--) 
{ 
    console.log(j); 
    if (locations[j-1]['distance'] && locations[j]['distance'] < locations[j-1]['distance']) 
    { 
     var temp = locations[j-1]; 
     locations[j-1]=locations[j]; 
     locations[j]=temp; 
     swapped = true; 
    } 
} 

你會碰到的最後一個循環的問題,所以我加if(locations[j-1]['distance'] ...

+0

謝謝,我確實忘記了我必須從.length中減去一個。我想我自從控制檯日誌顯示「對象,對象,對象...」沒有被編入索引。 – OrangeGrover

+0

沒問題! (^^) –

1

難道你不能使用Javascript數組sort函數?數組的

var arr = [{'value' : '456'},{'value':'123'}]; 
arr.sort(function(a,b){ 
    if(a.value>b.value){ 
     return 1; 
    }else if(a.value<b.value){ 
     return -1; 
    }else{ 
     return 0 
    } 
}); 
0

指數是從0到length-1的

for(var j=locations.length; j>i+1;j--) 

所以locations[j]是越界