我在Javascript中有以下数组结构:
var unsorted = [
{h:50,t:70},
{h:70,t:60},
{h:30,t:10}, // Ideal Value (Best combination of t being the least and h being the highest )
{h:10,t:30},
{h:2,t:10}
]
我需要以价值" {h:30,t:10}"的方式对其进行排序。 colud在数组的顶部或最后。
我尝试了冒泡排序,但我不知道我应该如何使用两个值。
冒泡排序:
function bubbleSort(a){
var swapped;
do{
swapped=false;
for(var i=0;i<a.length-1;i++){
var firstValue = parseInt(a[i].h) ;
var secondValue = parseInt(a[i+1].h) ;
if( firstValue > secondValue ){
var temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
swapped=true;
}
}
} while(swapped);
return a;
}
除了冒泡排序之外的任何其他方式都可以。
答案 0 :(得分:2)
您可以使用javascript内置排序功能。
以下是已排序为新排序数组的代码:
var sorted = unsorted.sort(function(a,b) {
return (a.t-b.t) * 1000 + (b.h-a.h);
});
请注意,这假设您的h中的数字不会大于999,否则您必须将乘数1000增加到更大的值。
以下是javascript排序函数的引用:http://www.w3schools.com/jsref/jsref_sort.asp
答案 1 :(得分:2)
更好的方法是
var sorted = unsorted.sort(function(a, b) {
return a.t === b.t ? b.h - a.h : a.t - b.t;
});
这种方式适用于任何大小的t
或h
。 (对于NaN和Infinity也优雅地失败了。)