2012-01-22 40 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]是越界