从数组中

时间:2016-03-28 14:21:39

标签: javascript arrays ecmascript-6

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

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

现在我想获得输出4,因为这是唯一的最高数字。

有没有好的&希望这样做的方法很短暂?

3 个答案:

答案 0 :(得分: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. 现在,使用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,第二个答案包含对多个备选项的广泛检查