2013-11-13 3 views
1

У меня есть массив индексов, называемый indexSelected. Существует также массив объектов, называемых погодой. Я поместил все имена сайтов, с которыми я столкнулся, в массив под названием stationName. Я хочу сортировать этот массив в алфавитном порядке, сохраняя исходные индексы для этого, я могу ссылаться на другие свойства, связанные с объектом. Я попробовал метод ниже, однако, я не могу заставить его работать.Сортировка массива, но сохранение исходного индекса

var stationName=[]; 
for (var i=0; i<indexSelected.length; i++) { 
    stationName.push(weather[indexSelected[i]]["Site Name"]);  
} 

var copyStationName = stationName.slice(0) 
var sortedStationName = stationName.sort(); 
var originalIndex=[]; 
for (var i=0; i<stationName.length; i++) { 
    originalIndex.push(copyStationName.indexOf(sortedStationName[i])) 
} 

var station=[]; 
for (var i=0; i<indexSelected.length; i++) { 
    station.push(weather[originalIndex[i]]["Site Name"]); 
} 

Этот массив станций должен был проверить правильность массива originalIndexes. Это не так, и я не знаю почему. Я был бы признателен за некоторую помощь или другой способ сортировки этого массива. Я ищу, чтобы положить все данные в таблицу, сортировать по алфавиту по названию сайта. Спасибо

+1

обеспечивает демонстрацию в jsfiddle.net, намного легче устранить, когда данные видны и может использовать консоль браузера для отладки – charlietfl

+0

Это звучит как 'asort()' в PHP. Здесь есть версия JS [здесь] (http://phpjs.org/functions/asort/). – h2ooooooo

ответ

2

Создайте массив объектов, которые несут как имя, так и индекс, а затем используйте custom comparison function для сортировки. Например.

var stationInfo = []; 
for (var i=0; i<indexSelected.length; i++) { 
    var idx = indexSelected[i]; 
    stationInfo.push({name: weather[idx]["Site Name"], idx: idx);  
} 

stationInfo.sort(function(a, b) { 
    // a & b are the array items (info objects) created above, so make 'em 
    // point at the `name` property we want to sort by 
    a = a.name; 
    b = b.name; 
    // ... then return -1/0/1 to reflect relative ordering 
    return a < b ? -1 : (a > b ? 1 : 0); 
}) 

// output a name + index pair 
console.log(stationInfo[0].name, stationInfo[0].idx); 
+0

Спасибо, что кажется, работает. – user10319

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