我有一个问题。我正在寻找一种方法来获得阵列中最高的唯一数字。
var temp = [1, 8, 8, 8, 4, 2, 7, 7];
现在我想获得输出4,因为这是唯一的最高数字。
有没有好的&希望这样做的方法很短暂?
答案 0 :(得分:2)
是的,有:
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]
现在,使用ES6 spread operator
从阵列中获取最大数字Math.max(...array) // 4
此代码相当于
Math.max.apply(Math, array);
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
使用点差运算符,您可以轻松找到最高的数字
Math.max(...numArray);
剩下的唯一事情就是预先从数组中过滤重复项,或者删除与最大数字匹配的所有元素(如果它重复)。
删除beforeHand在es6中最简单。
Math.max(...numArray.filter(function(value){ return numArray.indexOf(value) === numArray.lastIndexOf(numArray);}));
对于非es6兼容的删除重复项的方法,请查看Remove Duplicates from JavaScript Array,第二个答案包含对多个备选项的广泛检查