使用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添加到队伍数组中的每个项目。