数组javascript中的对象排序
我有一个API,可以根据请求从数据库中获取所有对象(电影)。每个对象都有几个等级,用于计算对象的一个主等级。然后将每个对象推入一个数组中。在发送JSON响应之前,将根据主评级对该数组进行排序。最高评级为排名第一 我想要的是,每个对象也有它的等级。因此,评级最高的对象也应该具有“排名”的属性:1 我只是对如何在发送回复之前实现这一点感到困惑。这是我的代码:数组javascript中的对象排序,javascript,sorting,ranking,Javascript,Sorting,Ranking,我有一个API,可以根据请求从数据库中获取所有对象(电影)。每个对象都有几个等级,用于计算对象的一个主等级。然后将每个对象推入一个数组中。在发送JSON响应之前,将根据主评级对该数组进行排序。最高评级为排名第一 我想要的是,每个对象也有它的等级。因此,评级最高的对象也应该具有“排名”的属性:1 我只是对如何在发送回复之前实现这一点感到困惑。这是我的代码: const moviesListByRank = function (req, res) { let movieslist = []; le
const moviesListByRank = function (req, res) {
let movieslist = [];
let movieMainRating = null;
Movie.find({}, function(err, movies){
if(err) {
console.log(err)
} else {
movies.forEach(function(movie){
movieslist.push({
name: movies.name,
category: movie.category,
movieMainRating: ((movie.FilterAction + hobby.FilterAdventure + movie.FilterRomantic)/3).toFixed(2),
FilterAction: movie.FilterAction,
FilterAdventure: movie.FilterAdventure,
FilterRomatic: movie.FilterRomantic,
_id: hobby._id
});
});
}
function compare(a,b){
if (b.movieMainRating < a.movieMainRating)
return -1;
if (b.movieMainRating > a.movieMainRating)
return 1;
return 0;
}
movieslist.sort(compare);
res
.status(200)
.json(movieslist);
});
};
const moviesListByRank=函数(req,res){
让movieslist=[];
让movieMainRating=null;
Movie.find({},函数(呃,movies){
如果(错误){
console.log(错误)
}否则{
电影。forEach(功能(电影){
movieslist.push({
名称:movies.name,
类别:电影。类别,
电影维护:((movie.FilterAction+hobby.FilterAdventure+movie.filterMantic)/3)固定(2),
FilterAction:movie.FilterAction,
FilterAdventure:movie.FilterAdventure,
FilterRomatic:movie.FilterRomatic,
_id:爱好
});
});
}
功能比较(a、b){
如果(b.movieMainRatinga.movieMainRating)
返回1;
返回0;
}
movieslist.sort(比较);
物件
.现状(200)
.json(电影列表);
});
};
一个简单的方法是:;在movieslist.sort(比较)之后
创建另一个for循环,forEach
还返回一个可以使用的索引
movieslist.forEach(function(movie, index){
movie.rank = index + 1;
});
您可以将forEach循环中已经存在的某些索引/等级分配给movieslist,然后交换交换元素的等级,以在compare方法中获得真实的等级。 见下文:
const moviesListByRank = function (req, res) {
let movieslist = [];
let movieMainRating = null;
Movie.find({}, function(err, movies){
if(err) {
console.log(err)
} else {
var tempIndex = 0;
movies.forEach(function(movie){
movieslist.push({
ranking: tempIndex++,
name: movies.name,
category: movie.category,
movieMainRating: ((movie.FilterAction + hobby.FilterAdventure + mo
vie.FilterRomantic)/3).toFixed(2),
FilterAction: movie.FilterAction,
FilterAdventure: movie.FilterAdventure,
FilterRomatic: movie.FilterRomantic,
_id: hobby._id
});
});
}
function compare(a,b){
if (b.movieMainRating < a.movieMainRating) {
var tempRank = b.ranking;
b.ranking = a.ranking;
a.ranking = tempRank;
return -1;
}
if (b.movieMainRating > a.movieMainRating)
return 1;
return 0;
}
movieslist.sort(compare);
res
.status(200)
.json(movieslist);
});
};
const moviesListByRank=函数(req,res){
让movieslist=[];
让movieMainRating=null;
Movie.find({},函数(呃,movies){
如果(错误){
console.log(错误)
}否则{
var指数=0;
电影。forEach(功能(电影){
movieslist.push({
排名:tempIndex++,
名称:movies.name,
类别:电影。类别,
电影维护:((movie.FilterAction+hobby.FilterAdventure+mo
vie.Filterrmantic)/3)至固定(2),
FilterAction:movie.FilterAction,
FilterAdventure:movie.FilterAdventure,
FilterRomatic:movie.FilterRomatic,
_id:爱好
});
});
}
功能比较(a、b){
如果(b.movieMainRatinga.movieMainRating)
返回1;
返回0;
}
movieslist.sort(比较);
物件
.现状(200)
.json(电影列表);
});
};
尝试使用排序查询如果我这样做,电影排名不准确,最高评级的电影排名为17。