Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个最高分的返回指数_Javascript_Arrays - Fatal编程技术网

Javascript 多个最高分的返回指数

Javascript 多个最高分的返回指数,javascript,arrays,Javascript,Arrays,我正在研究如何从一个数组中返回最高分数的索引,但我很难确定是否可以从该方法返回多个项,或者是否需要使用另一种方法返回数组中两个最高分数的索引 var scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61,

我正在研究如何从一个数组中返回最高分数的索引,但我很难确定是否可以从该方法返回多个项,或者是否需要使用另一种方法返回数组中两个最高分数的索引

 var scores = [60, 50, 60, 58, 54, 54,
                  58, 50, 52, 54, 48, 69,
                  34, 55, 51, 52, 44, 51,
                  69, 64, 66, 55, 52, 61,
                  46, 31, 57, 52, 44, 18,
                  41, 53, 55, 61, 51, 44];

var tests = scores.length;
var highest;
for (var i = 0; i < scores.length; i++) {
  if (i === 0) {
    highest = scores[i];
  }
  if (scores[i] > highest) {
    highest = scores[i];
  }
}
var得分=[60,50,60,58,54,54,
58, 50, 52, 54, 48, 69,
34, 55, 51, 52, 44, 51,
69, 64, 66, 55, 52, 61,
46, 31, 57, 52, 44, 18,
41, 53, 55, 61, 51, 44];
var测试=分数。长度;
var最高;
对于(变量i=0;i最高){
最高=分数[i];
}
}

返回包含索引的数组。当您得到一个高于最高值的元素时,清空数组并将i放入其中。当得到一个等于最大值的元素时,将i推到数组上

var highest = scores[0];
var indexes = [0];
for (var i = 1; i < scores.length; i++) {
    if (scores[i] > highest) {
        // Found new highest, reset everything
        indexes = [i];
        highest = scores[i];
    } else if (scores[i] == highest) {
        // Found duplicate highest, add its index to indexes array
        indexes.push(i);
    }
}
var最高=得分[0];
var指数=[0];
对于(变量i=1;i最高){
//找到新的最高点,重置所有内容
指数=[i];
最高=分数[i];
}else if(得分[i]==最高){
//发现重复最高,将其索引添加到索引数组
指数推送(i);
}
}

基本的脚本方式如下:

var scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61, 46, 31, 57, 52, 44, 18, 41, 53, 55, 61, 51, 44];

alert(getHighestIndexes(scores));    

function getHighestIndexes(scores)
{
    var result = [];
    for (var i = 0; i < scores.length; i++) 
    {
        if (i == 0)             
            result.push(scores[i]);                         
        else if (scores[i] > result[0])                     
            result = [i];                   
        else if (scores[i] == result[0])        
            result.push(i);         
    }
    return result;
}
<script src="https://raw.githubusercontent.com/lodash/lodash/3.10.1/lodash.min.js" ></script>    
<script>
    var scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61, 46, 31, 57, 52, 44, 18, 41, 53, 55, 61, 51, 44];  
    alert(getHighestIndexes(scores));

    function getHighestIndexes(scores)
    {
        var arrayAsObject = _.zip(scores, _.range(scores.length));
        return _.pluck(_.where(arrayAsObject , {"0" : _.max(scores)}), "1");    
    }
</script>   
var得分=[60,50,60,58,54,54,58,50,52,54,48,69,34,55,51,52,44,51,69,64,66,55,52,61,46,31,57,52,44,18,41,53,55,61,51,44];
警报(获取最高索引(分数));
函数GetHighestIndex(分数)
{
var结果=[];
对于(变量i=0;i结果[0])
结果=[i];
否则如果(分数[i]==结果[0])
结果:推(i);
}
返回结果;
}
但最佳实践是使用lodash或Underline js等函数库,然后您可以这样做:

var scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61, 46, 31, 57, 52, 44, 18, 41, 53, 55, 61, 51, 44];

alert(getHighestIndexes(scores));    

function getHighestIndexes(scores)
{
    var result = [];
    for (var i = 0; i < scores.length; i++) 
    {
        if (i == 0)             
            result.push(scores[i]);                         
        else if (scores[i] > result[0])                     
            result = [i];                   
        else if (scores[i] == result[0])        
            result.push(i);         
    }
    return result;
}
<script src="https://raw.githubusercontent.com/lodash/lodash/3.10.1/lodash.min.js" ></script>    
<script>
    var scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61, 46, 31, 57, 52, 44, 18, 41, 53, 55, 61, 51, 44];  
    alert(getHighestIndexes(scores));

    function getHighestIndexes(scores)
    {
        var arrayAsObject = _.zip(scores, _.range(scores.length));
        return _.pluck(_.where(arrayAsObject , {"0" : _.max(scores)}), "1");    
    }
</script>   

var得分=[60,50,60,58,54,54,58,50,52,54,48,69,34,55,51,52,44,51,69,64,66,55,52,61,46,31,57,52,44,18,41,53,55,61,51,44];
警报(获取最高索引(分数));
函数GetHighestIndex(分数)
{
var arrayAsObject=yas.zip(分数,yas.range(分数.长度));
返回u.pull(u.where(arrayAsObject,{0:}.max(scores)}),“1”);
}
使用javascript
.sort()
函数将它们从最高到最低排序,然后获取数组的前2个索引(或任意数量)

var得分=[60,50,60,58,54,54,
58, 50, 52, 54, 48, 69,
34, 55, 51, 52, 44, 51,
69, 64, 66, 55, 52, 61,
46, 31, 57, 52, 44, 18,
41, 53, 55, 61, 51, 44];
var sorted=scores.sort(函数(a,b){return b-a});
控制台日志(已排序);

警报('两个最高分数:'+sorted[0]+'和'+sorted[1])还有另一种方法:找到max元素,然后将源数组缩减为max元素的索引,如下所示

var arr = [60, 50, 60, 58, 54, 54,
          58, 50, 52, 54, 48, 69,
          34, 55, 51, 52, 44, 51,
          69, 64, 66, 55, 52, 61,
          46, 31, 57, 52, 44, 18,
          41, 53, 55, 61, 51, 44];
var max = Math.max.apply(Math,arr);
var res = arr.reduce(function(acc,cur,index){
    if(cur==max) acc.push(index);
    return acc;
},[]);

scores.slice().sort().filter(函数(v,i,a){返回a.indexOf(v)==i;}).slice(-2)
@vohumanreturns
[66,69]
,这是最高的唯一分数,但当我阅读问题时,我相信OP希望找到
69
的所有索引(最高但出现两次)。编辑:现在我又读了一遍,我想我可能误解了。这个问题不是很清楚,这就是为什么我没有给出答案的原因。由于OP存储的是最高值,而不是发布的代码段中最高值的索引,所以我建议使用该代码段。我认为您不应该在ArrayEah上迭代两次,对于10k元素可能需要额外的2ms;)