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