2014-09-03 120 views
0

我有三個排序的數組,我需要從這些數組中找到前五個「5」元素。我能夠找到前兩個元素最大的元素。如何找到其他?如何從排序的數組中找到最大的元素?

你能建議我們如何找到其他3個元素?

這裏是我的代碼

var maxArray=[]; 
     var array1=[2,7,12,23,40,44,67,88,102] 
     var array2=[3,12,14,17,23,40,41,67,108] 
     var array3=[8,12,23,40,59,86,119,130] 
     var firstMax=array1[array1.length-1]; 
     var secondMax=array2[array2.length-1]; 


     alert(array1[array1.length-1]); 
     if(array1[array1.length-1]>array2[array2.length-1] && array1[array1.length-1]>array3[array3.length-1]){ 

      maxArray.push(array1[array1.length-1]) ; 
      firstMax=array1[array1.length-1]; 
      if(array2[array2.length-1]>array3[array3.length-1]){ 
       secondMax=array2[array2.length-1]; 
      }else { 
       secondMax=array3[array3.length-1]; 

      } 
     }else if(array2[array2.length-1]>array1[array1.length-1]&& array2[array2.length-1]>array3[array3.length-1]){ 
      maxArray.push(array1[array2.length-1]) 
      firstMax=array2[array2.length-1]; 

      if(array1[array1.length-1]>array3[array3.length-1]){ 
       secondMax=array1[array1.length-1]; 
      }else { 
       secondMax=array3[array3.length-1]; 

      } 

     }else{ 
      maxArray.push(array3[array3.length-1]) 
      firstMax=array3[array3.length-1]; 

      if(array2[array2.length-1]>array1[array1.length-1]){ 
       secondMax=array2[array2.length-1]; 
      }else { 
       secondMax=array1[array1.length-1]; 

      } 

     } 
     maxArray.push(secondMax) 

     alert(maxArray) 

小提琴 http://jsfiddle.net/9vsjm8uh/

+0

豈不是更容易建立一個合併的陣列,那種,然後彈出關閉的最後5個元素? – 2014-09-03 17:03:53

+0

@MarcB好吧,這是主意,不是嗎?按降序合併數組,並在合併數組中的5個元素時停止合併? – beaker 2014-09-03 17:06:04

+0

是的,但OP的做了很多額外的工作,而不是基本的'pop_5((array1 + array2 + array3).sort())'(僞代碼,當然) – 2014-09-03 17:07:58

回答

2

jsFiddle(是的,即使沒有更好的jQuery,感謝@Rajacsp)

var array1 = [2, 7, 12, 23, 40, 44, 67, 88, 102] 
var array2 = [3, 12, 14, 17, 23, 40, 41, 67, 108] 
var array3 = [8, 12, 23, 40, 59, 86, 119, 130] 

var flatArray = array1.concat(array2).concat(array3); 

flatArray.sort(function sortNumber(a, b) { return b - a; }); 
var maxArray = flatArray.slice(0, 5); 

alert(maxArray); // 130,119,108,102,88 
+1

使用var maxArray = flatArray.slice(0,5);提取前5個元素。 – Swetha 2014-09-03 17:13:43

+0

謝謝,更新 – 2014-09-03 17:14:55

+0

@Plantface,你爲什麼不堅持Jquery lib?我會得到一些投票:-) – 2014-09-03 17:24:25

0

我建議以下思路:

既然你正在尋找的前5個值,它們將在最壞的情況下,都在同一個列表中。因此,最多可以檢查5 * 3 = 15個值。

然後,您可以從每個列表中獲取5個最高值(如果列表已經排序,這應該是微不足道的),然後將它們放在另一個列表中。現在你有一個15的列表,你想從這個列表中找到前5個值。有不同的方法可以做到這一點 - 您可以對列表進行排序,然後獲取前5個值,或者您可以遍歷列表,每次找到最大值。

0

把所有的數組,對它們進行排序,然後得到最後的5個值。

var total = array1.concat(array2, array3); 
total = total.sort(function(a,b){return a-b}); 
//Now total[length-5] is the 5th largest value 
//total[length-4] is the 4th largest and so on 
+0

請注意,排序參數確保按順序對值進行排序(即2,3,7,8,12,12等),而不是返回12,12,12,2,3,7,8的.sort()因爲它按第一位數字排序)。 – 2014-09-03 17:16:35

+0

你不能用'+'連接數組。這不是PHP。 – 2014-09-03 17:18:12

+0

哈哈ooops謝謝。 – 2014-09-03 17:18:51

0

普通的JavaScript(不加庫):

var array1=[2,7,12,23,40,44,67,88,102]; 
var array2=[3,12,14,17,23,40,41,67,108]; 
var array3=[8,12,23,40,59,86,119,130]; 


alert(getTopFive(array1, array2, array3)); 

function getTopFive(ar1, ar2, ar3){ 
    var finalArray = array1.concat(array2).concat(array3); 
    finalArray.sort(function sortInverse(a,b) { return b - a; }); 
    return finalArray.slice(0, 5); 
} 
+1

現在來了,這可能是一個很好的建議,在其他答案:D – 2014-09-03 17:20:50

+0

嗨,謝謝你回答爲什麼這個函數內使用的sort函數sortInverse(a,b){return a - b; } – Shruti 2014-09-03 17:40:40

相關問題