我需要一个返回具有五个位置的数组的方法。该数组的编号依次表示参数中数组最高编号的索引。我有这个,但我认为有一个更好的方法。



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()使用indexvalue创建对象数组
然后使用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))

10-07 19:59
查看更多