【发布时间】:2016-01-26 08:00:45
【问题描述】:
我需要对一个对象数组进行排序,其中包含多个键,其值与索引顺序有关。见例子:
var array = [
{
0: .5,
1: .3,
2: .15
},
{
0: .7,
1: .25,
2: .9
},
{
0: .45,
1: .9,
2: .08
}
];
我想根据键的值进行排序,键是排序最终结果中对象的最终索引。在上面的示例中,数组中的第二个对象将被放置在索引 0 中,因为它包含该索引的最大数字。接着是第 3 个对象,最后是第 1 个。当前实现:
var array = [
{
0: .5,
1: .3,
2: .15
},
{
0: .7,
1: .25,
2: .9
},
{
0: .45,
1: .9,
2: .08
}
];
var final = [null,null,null];
var largest;
for(var f=0;f<final.length;f++)
{
largest = null;
for(var a=0; a <array.length;a++)
{
var obj = array[a][f];
if(!largest || ( obj > largest[f] && final.indexOf(array[a]) == -1 ) )
{
largest = array[a];
}
}
final[f] = largest;
}
console.log(final);
虽然我当前的实现有效,但它不是很优化。这是在 node.js 中运行的,包含超过 1500 个对象的数组。最终数组不需要包含所有 1500 个对象,而是由用户发起的限制(3 到 15 之间)。有什么方法可以使用本机排序功能或任何其他已知方式来实现这种独特的排序。
【问题讨论】:
标签: javascript node.js sorting