我正在使用此代码从具有最高值
的数组中获取密钥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)。所以我的目标是获得具有最高价值的密钥,但是如果有更多具有相同最高值的元素,则随机选择其中一个。
答案 0 :(得分:1)
这是一种方法:
确定最大值:
var max = Math.max.apply(Math, o);
创建仅包含最大值的数组:
var maxes = o.filter(function(val) { return val == max; });
根据this question's answers从maxes
随机挑选。
所以我的目标是获得具有最高价值的密钥,但是如果有更多具有相同最高值的元素,则随机选择其中一个。
如图所示,使用一组简单值,无关紧要;你可以选择第一个,并且它和其他任何一个之间没有可观察到的差异。所以大概你的数组不仅仅是简单的数值 - 如果是这样,只有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));