根据最高值从数组中获取随机元素

时间:2018-02-12 08:21:01

标签: jquery arrays

我正在使用此代码从具有最高值

的数组中获取密钥
function getHighest(o){
    var vals = [];
    for(var i in o){
        vals.push(o[i]);
    }

    var max = Math.max.apply(null, vals);

    for(var i in o){
        if(o[i] == max){
            return i;
        }
    }
}

但有时在数组中有更多结果具有相同的最高值,例如

item1 = 4
item2 = 2
item3 = 1
item4 = 4

我正在使用的代码只返回第一个结果(item1)。所以我的目标是获得具有最高价值的密钥,但是如果有更多具有相同最高值的元素,则随机选择其中一个。

3 个答案:

答案 0 :(得分:1)

这是一种方法:

  1. 确定最大值:

    var max = Math.max.apply(Math, o);
    
  2. 创建仅包含最大值的数组:

    var maxes = o.filter(function(val) { return val == max; });
    
  3. 根据this question's answersmaxes随机挑选。

  4.   

    所以我的目标是获得具有最高价值的密钥,但是如果有更多具有相同最高值的元素,则随机选择其中一个。

    如图所示,使用一组简单值,无关紧要;你可以选择第一个,并且它和其他任何一个之间没有可观察到的差异。所以大概你的数组不仅仅是简单的数值 - 如果是这样,只有FWIW,你需要以另一种方式找到max

答案 1 :(得分:0)

保存数组上的所有索引。如果只有一个,则发送元素0.如果多个从数组中返回一个随机元素。

function getHighest(o) {
  var vals = [];
  for (var i in o) {
    vals.push(o[i]);
  }

  var max = Math.max.apply(null, vals);

  var max2 = []
  for (var i in o) {
    if (o[i] == max) {
      max2.push(i); /* Push the index to temp array */
    }
  }

  if (max2.length == 1) return max2[0]; /* If one element, return first element */
  else return max2[Math.floor(Math.random() * max2.length)]; /* If multiple, select random */
}

console.log(getHighest([1, 2, 3, 4, 2, 3, 4]));

答案 2 :(得分:0)

你可以这样做



 function getHeighest(arr){
    var temp_max = Math.max.apply(null,arr);
    for(var i in arr){
      if(arr[i] == temp_max){
        return i;
      }
    }
  }
  
  var my_arr = [2,4,1,0,3,4];
 
  console.log(getHeighest(my_arr));