如何按对象中的值创建排序索引数组

时间:2016-03-26 19:10:19

标签: javascript arrays sorting

我有多个名为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]

最优雅的方式是什么?

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;
&#13;
&#13;

答案 2 :(得分:0)

通过使用Temp变量,您可以这样做。否则,如果你能负担得起修改主数据,那么可以消除临时变量。

&#13;
&#13;
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;
&#13;
&#13;