我有多个名为stations
的对象。每个电台都有一个名为money
的属性。
stations[0].money = 2000
stations[1].money = 500
stations[2].money = 1200
stations[3].money = 2200
我想创建一个站点索引数组(在此示例中为0,1,2和3),但是按每个站点按金额递增的金额进行排序。 所以我希望:
var moneyArray = [1, 2, 0, 3]
最优雅的方式是什么?
答案 0 :(得分:3)
您可以从正常的索引数组开始(最好是循环生成),然后按照stations
数组中相应索引处对象的值进行排序:
[0, 1, 2, 3].sort(function(ai, bi) {
return stations[ai].money - stations[bi].money;
})
答案 1 :(得分:1)
您可以在这里查看:Sorting with map
// the array to be sorted
var stations = [
{ money: 2000 },
{ money: 500 },
{ money: 1200 },
{ money: 2200 },
];
// temporary array holds objects with position and sort-value
var mapped = stations.map(function (el, i) {
return { index: i, value: el.money };
})
// sorting the mapped array containing the reduced values
mapped.sort(function (a, b) {
return a.value - b.value;
});
// container for the resulting order
var result = mapped.map(function (el) {
return stations[el.index];
});
// get the wanted keys
var keys = mapped.map(function (el) {
return el.index;
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(keys, 0, 4) + '</pre>');
&#13;
答案 2 :(得分:0)
通过使用Temp变量,您可以这样做。否则,如果你能负担得起修改主数据,那么可以消除临时变量。
var stations = [{money :2000},{money :500},{money :1200},{money :2200}]
var tempArray = stations.slice();
tempArray.forEach(function (value, i) {
value.index = i;
});
tempArray.sort(function(a, b){return a.money-b.money});
var finalResult = tempArray.map(function(a) {return a.index;});
document.write(JSON.stringify(finalResult));
&#13;