我有一个名为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数组是否正确。它不是,我不知道为什么。我会感谢一些帮助,或其他方式来排序这个数组。我希望将所有数据放入表中,按站点名称的字母顺序排序。感谢
答案 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);