我有一個問題。我正在尋找一種方法來獲得數組中最大的唯一編號。從陣列中獲取最高但也是唯一的編號
var temp = [1, 8, 8, 8, 4, 2, 7, 7];
現在我想得到輸出4,因爲這是唯一的最高數字。
有沒有很好的&希望短的方法來做到這一點?
我有一個問題。我正在尋找一種方法來獲得數組中最大的唯一編號。從陣列中獲取最高但也是唯一的編號
var temp = [1, 8, 8, 8, 4, 2, 7, 7];
現在我想得到輸出4,因爲這是唯一的最高數字。
有沒有很好的&希望短的方法來做到這一點?
是的,有:
Math.max(...temp.filter(el => temp.indexOf(el) == temp.lastIndexOf(el)))
說明:
首先,獲取其正在使用的陣列中的獨特Array#filter
temp.filter(el => temp.indexOf(el) === temp.lastIndexOf(el)) // [1, 4, 2]
現在的元素,從a得到最大的數字rray使用ES6 spread operator
Math.max(...array) // 4
此代碼相當於
Math.max.apply(Math, array);
採用擴頻操作,你可以找到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一看,第二個答案包含了幾個備選方案
的廣泛的考試如果你不想要漂亮的,你可以使用排序和循環來檢查最小數量的項目:
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;
}
}
我不認爲箭頭功能已廣泛支持跨瀏覽器。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions – NickT
@NickT:可能比傳播的論點...但沒關係,OP標記他的問題ES6,所以我用它。 – Bergi
我在嘲諷什麼。因爲我得到NaN ....我沒有---> console.log(Math.max(temp.filter(el => temp.indexOf(el)== temp.lastIndexOf(el)))); – Romano