排序数组但保留原始索引

时间:2013-11-13 19:27:30

标签: javascript arrays sorting

我有一个名为indexSelected的索引数组。还有一系列称为天气的物体。我已将我正在处理的所有站点名称放入名为stationName的数组中。我想按字母顺序对这个数组进行排序,同时保留原始索引,我可以参考与object相关的其他属性。我尝试了下面的方法,但是,我似乎无法让它工作。

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 个答案:

答案 0 :(得分:2)

构建一个包含名称和索引的对象数组,然后使用custom comparison function进行排序。 E.g。

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);