Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象中创建按值排序的索引数组_Javascript_Arrays_Sorting - Fatal编程技术网

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

Javascript 如何在对象中创建按值排序的索引数组,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有称为站的多个iple对象。每个电台都有一个名为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] 最优雅的方式是什么?您可以看看这里: //要排序的数组 v

我有称为
站的多个iple对象。每个电台都有一个名为
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]

最优雅的方式是什么?

您可以看看这里:

//要排序的数组
var站=[
{货币:2000},
{货币:500},
{货币:1200},
{货币:2200},
];
//临时数组保存具有位置和排序值的对象
var mapped=stations.map(功能(el,i){
返回{index:i,value:el.money};
})
//对包含缩减值的映射数组进行排序
映射.排序(函数(a,b){
返回a.value-b.value;
});
//用于生成订单的容器
var result=mapped.map(函数(el){
返回站[高程指数];
});
//拿到通缉的钥匙
var keys=mapped.map(函数(el){
返回el.index;
});
document.write(“”+JSON.stringify(结果,0,4)+“”);

document.write(“”+JSON.stringify(键,0,4)+“”)通过使用临时变量,您可以这样做。否则,如果您可以修改主数据,则可以消除temp变量

var站=[{money:2000},{money:500},{money:1200},{money:2200}]
var tempArray=stations.slice();
forEach(函数(值,i){
value.index=i;
});
sort(函数(a,b){返回a.money-b.money});
var finalResult=tempArray.map(函数(a){returna.index;});

document.write(JSON.stringify(finalResult))
您可以从索引的常规数组(最好是生成循环)开始,并根据
站点中相应索引处的对象值对其进行排序
数组:


您的意思是将阵列克隆到
tempArray
?然后您错过了一个
.slice()
调用。您当前的代码确实改变了
数组以及其中的每个对象。@Bergi谢谢。我加了一句,你打了我。索引数组可以通过
stations.map((u,i)=>i)
或者
Object.keys(stations).sort
?对我来说绝对是最好的解决方案:)@Nickolay包含非整数键(如果有的话),要忽略它们,我建议只使用数组方法
Array.from(stations.keys())
是一个简短的多填充选项。@Nickolay:好主意(尤其是简洁),但别忘了这会得到字符串而不是整数。
[0, 1, 2, 3].sort(function(ai, bi) {
    return stations[ai].money - stations[bi].money;
})