Javascript 从数组中获取最高但也是唯一的数字

Javascript 从数组中获取最高但也是唯一的数字,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有个问题。我正在寻找一种方法来获得数组中最高的唯一数 var temp = [1, 8, 8, 8, 4, 2, 7, 7]; 现在我想得到输出4,因为这是唯一的最高数字 有没有一个好的且希望很短的方法可以做到这一点?是的,有: Math.max(...temp.filter(el => temp.indexOf(el) == temp.lastIndexOf(el))) 说明: 首先,使用 现在,使用ES6从数组中获取最大值 此代码相当于 Math.max.apply(Math,

我有个问题。我正在寻找一种方法来获得数组中最高的唯一数

var temp = [1, 8, 8, 8, 4, 2, 7, 7];
现在我想得到输出4,因为这是唯一的最高数字

有没有一个好的且希望很短的方法可以做到这一点?

是的,有:

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

  • 首先,使用

  • 现在,使用ES6从数组中获取最大值

    此代码相当于

    Math.max.apply(Math, array);
    
  • 是的,有:

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

  • 首先,使用

  • 现在,使用ES6从数组中获取最大值

    此代码相当于

    Math.max.apply(Math, array);
    

  • 使用spread运算符,您可以很容易地找到最高值

    Math.max(...numArray);
    
    剩下的唯一一件事就是预先从数组中筛选重复项,或者删除与最大数量匹配的所有元素(如果是重复项)

    在这样的es6中,预先删除是最容易的

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

    对于非es6兼容的删除重复项的方法,请看一看,第二个答案包含对多个备选方案的广泛检查

    使用扩展运算符,您可以轻松找到最高值

    Math.max(...numArray);
    
    剩下的唯一一件事就是预先从数组中筛选重复项,或者删除与最大数量匹配的所有元素(如果是重复项)

    在这样的es6中,预先删除是最容易的

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

    对于不兼容es6的删除重复项的方法,请看一看,第二个答案包含对多个备选方案的广泛检查

    如果您不想太花哨,可以使用排序和循环来检查最少数量的项:

    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;
      }
    
    }
    

    如果您不想太花哨,可以使用排序和循环来检查最少数量的项目:

    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;
      }
    
    }
    

    我认为箭头函数在浏览器中还没有广泛的支持@尼克特:可能不仅仅是散布争论……但没关系,OP把他的问题标在了ES6上,所以我用了它。我弄乱了什么吗。因为我得到了楠。。。。我做了-->console.log(Math.max(temp.filter(el=>temp.indexOf(el)==temp.lastIndexOf(el))@罗曼诺:你错过了
    。看,我认为箭头函数在浏览器中还没有广泛的支持@尼克特:可能不仅仅是散布争论……但没关系,OP把他的问题标在了ES6上,所以我用了它。我弄乱了什么吗。因为我得到了楠。。。。我做了-->console.log(Math.max(temp.filter(el=>temp.indexOf(el)==temp.lastIndexOf(el))@罗曼诺:你错过了
    。请参见
    Set
    实际上并不删除所有非唯一的元素,它只删除它们的重复项,以便每个元素中有一个保留在集合中。我认为OP期望的结果是4,而不是8。
    Set
    实际上并没有删除所有非唯一的元素,它只是删除它们的重复项,以便每个元素中有一个保留在集合中。我认为OP期望的结果是4,而不是8。