Jquery-доступ к элементам в ассоциативно индексированном массиве - PullRequest
1 голос
/ 22 января 2012

Я пытаюсь отсортировать массив locations от кратчайшего до самого длинного расстояния с помощью следующего кода:

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 для массива местоположений, и это выглядит так:

[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?

Ответы [ 3 ]

1 голос
/ 22 января 2012

Разве вы не можете использовать массив 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 голосов
/ 22 января 2012

Вы начали с 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 голосов
/ 22 января 2012

Индекс массива от 0 до длины-1

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

, поэтому locations[j] выходит за пределы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...