我需要一个返回具有五个位置的数组的方法。该数组的编号依次表示参数中数组最高编号的索引。我有这个,但我认为有一个更好的方法。
function calculateHighests(array){ // in array[array.lentgth-1] is saved a very low number
var max1=max2=max3=max4=max5=array.length-1;
for(var i=0;i<array.length;i++){
if(array[i]>array[max5]){
if(array[i]>array[max4]){
if(array[i]>array[max3]){
if(array[i]>array[max2]){
if(array[i]>array[max1]){
max1=i;
} else {
max2=i;
}
} else {
max3=i;
}
} else {
max4=i;
}
} else {
max5=i;
}
}
}
res = [max1,max2,max3,max4,max5];
return res;
}
var inp = [2, 4, 6, 5, 1, 3, 7, 8, 0];
var out = calculateHighests(inp);
console.log(out);
数组中的数字可以重复。
最佳答案
您可以先Array.prototype.sort()
数组,然后使用Array.prototype.map()
获取索引数组
function findMaxPositions(arr,n){
return arr.slice(0).sort((a,b) => b-a).slice(0,n).map(x => arr.indexOf(x));
}
console.log(findMaxPositions([0,3,7,1,8,3,5,0,2,9],5));
如果数字可以重复,请按照下列步骤操作:
使用
map()
使用index
和value
创建对象数组然后使用
sort()
根据值对数组进行排序然后使用
slice()
获取第一个5
元素再次使用
map()
将对象数组转换为索引数组function findMaxPositions(arr,n){
return arr.map((val,ind) => ({val,ind})).sort((a,b) => b.val-a.val).slice(0,n).map(x => x.ind);
}
console.log(findMaxPositions([1,1,1,1,1],5))