2012-01-22 2 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; 
} 

Когда я попытался запустить программу, я получаю следующее сообщение об ошибке в Firebug:

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...}] 

Есть ли способ численно индексировать объекты, сохраняя при этом данные объектов, ассоциативно проиндексированные?

Или есть способ получить доступ к элементу ith + 1 или ith-1, если у меня есть возможность использовать this.distance в цикле foreach?

+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 function ??

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 до длины-1

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

так locations[j] вне связанного

Смежные вопросы