Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 - Fatal编程技术网

使用JavaScript对数组中的数字进行排序

使用JavaScript对数组中的数字进行排序,javascript,Javascript,给定一个唯一数字数组,返回原始数组的新排名数组。例如,如果您的输入数组是[10,5,20],则输出应该是[2,3,1],因为10是第二大数字,5是第三大数字,20是最大数字 我的答案是返回[1,2,0],而不是[2,3,1]。我不知道我错在哪里 功能排名(arr){ //添加您认为必要的任何参数 var sorted=arr.slice().sort(函数(a,b){ 返回b-a }) var ranks=arr.slice().map(函数(v){ 返回已排序。索引为(v) }); 返回等级

给定一个唯一数字数组,返回原始数组的新排名数组。例如,如果您的输入数组是
[10,5,20]
,则输出应该是
[2,3,1]
,因为
10
是第二大数字,
5
是第三大数字,
20
是最大数字

我的答案是返回
[1,2,0]
,而不是
[2,3,1]
。我不知道我错在哪里

功能排名(arr){
//添加您认为必要的任何参数
var sorted=arr.slice().sort(函数(a,b){
返回b-a
})
var ranks=arr.slice().map(函数(v){
返回已排序。索引为(v)
});
返回等级;
}
log(排名([10,5,20])
数组索引从
零开始

您可以添加一个索引

sorted.indexOf(v) + 1
功能排名(arr){
//添加您认为必要的任何参数…祝您好运!
var sorted=arr.slice().sort(函数(a,b){返回b-a})
var ranks=arr.slice().map(函数(v){return sorted.indexOf(v)+1});
返回等级;
}
log(排名([10,5,20])试试这个

function rankings(arr){
  // add whatever parameters you deem necessary....good luck! 
  var sorted = arr.slice().sort(function(a,b){return b-a})
  var ranks = arr.slice().map(function(v){ return sorted.indexOf(v) + 1});
  return ranks;
}

rankings([10, 5, 20]); // [2, 3, 1]

我只是将1添加到从0开始的索引中,这是因为数组的第一个元素是索引“0”。 将代码更改为:
var ranks=arr.slice().map(函数(v){return sorted.indexOf(v)+1})

您可以

  • 将值与索引一起存储在数组中
  • 按值排序
  • 将秩映射到给定的值和索引
  • 按索引排序以获取数组的原始排序
  • 以排名为例
函数排名(数组){
返回数组
.map((v,i)=>[v,i])
.sort((a,b)=>b[0]-a[0])
.map((a,i)=>[…a,i+1])
.sort((a,b)=>a[1]-b[1])
.map(a=>a[2]);
}

console.log(排名([10,5,20]);//2 3 1
在ES6中变得更容易:

功能排名(arr){
排序常量=[…arr].sort((a,b)=>b-a);
返回arr.map((x)=>sorted.indexOf(x)+1);
};

log(排名([10,5,20])这是因为索引从0开始,而不是从1开始。我认为如果您只需将+1添加到
return sorted.indexOf(v)
中,就可以了。您的函数是正确的,只是javascript数组是基于零的,即第一项的索引是0。只需将+1添加到队伍数组中的每个项目。