2016-03-28 81 views
0

我有一個問題。我正在尋找一種方法來獲得數組中最大的唯一編號。從陣列中獲取最高但也是唯一的編號

var temp = [1, 8, 8, 8, 4, 2, 7, 7]; 

現在我想得到輸出4,因爲這是唯一的最高數字。

有沒有很好的&希望短的方法來做到這一點?

回答

2

是的,有:

Math.max(...temp.filter(el => temp.indexOf(el) == temp.lastIndexOf(el))) 

說明:

  1. 首先,獲取其正在使用的陣列中的獨特Array#filter

    temp.filter(el => temp.indexOf(el) === temp.lastIndexOf(el)) // [1, 4, 2] 
    
  2. 現在的元素,從a得到最大的數字rray使用ES6 spread operator

    Math.max(...array) // 4 
    

    此代碼相當於

    Math.max.apply(Math, array); 
    
+1

我不認爲箭頭功能已廣泛支持跨瀏覽器。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions – NickT

+0

@NickT:可能比傳播的論點...但沒關係,OP標記他的問題ES6,所以我用它。 – Bergi

+1

我在嘲諷什麼。因爲我得到NaN ....我沒有---> console.log(Math.max(temp.filter(el => temp.indexOf(el)== temp.lastIndexOf(el)))); – Romano

0

採用擴頻操作,你可以找到hightest數易

Math.max(...numArray); 

唯一剩下則是預先過濾數組中的重複項,或者刪除所有匹配最大值的元素如果其重複,則爲mber。

刪除beforeHand將是最簡單的es6這樣的。

Math.max(...numArray.filter(function(value){ return numArray.indexOf(value) === numArray.lastIndexOf(numArray);})); 

對於非ES6兼容的方式來刪除重複的Remove Duplicates from JavaScript Array一看,第二個答案包含了幾個備選方案

+2

'Set'實際上並不移除所有非唯一元素,它只移除它們的重複項所以每個人中的一個留在集合中。我認爲OP是期待結果4,而不是8. – Bergi

+0

你是完全正確的,我會修改我的anser – Louis

1

的廣泛的考試如果你不想要漂亮的,你可以使用排序和循環來檢查最小數量的項目:

var max = 0; 
var reject = 0; 

// sort the array in ascending order 
temp.sort(function(a,b){return a-b}); 
for (var i = temp.length - 1; i > 0; i--) { 
    // find the largest one without a duplicate by iterating backwards 
    if (temp[i-1] == temp[i] || temp[i] == reject){ 
    reject = temp[i]; 
    console.log(reject+" "); 
    } 
    else { 
    max = temp[i]; 
    break; 
    } 

}