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 数组是否正确。不是,我也不知道为什么。我会很感激一些帮助,或者另一种对这个数组进行排序的方法。我希望将所有数据放入一个表中,按站点名称的字母顺序排序。谢谢

4

1 回答 1

2

构建一个包含名称和索引的对象数组,然后使用自定义比较函数进行排序。例如

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);
于 2013-11-13T19:53:50.437 回答