Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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/sorting/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_Sorting_Ranking - Fatal编程技术网

数组javascript中的对象排序

数组javascript中的对象排序,javascript,sorting,ranking,Javascript,Sorting,Ranking,我有一个API,可以根据请求从数据库中获取所有对象(电影)。每个对象都有几个等级,用于计算对象的一个主等级。然后将每个对象推入一个数组中。在发送JSON响应之前,将根据主评级对该数组进行排序。最高评级为排名第一 我想要的是,每个对象也有它的等级。因此,评级最高的对象也应该具有“排名”的属性:1 我只是对如何在发送回复之前实现这一点感到困惑。这是我的代码: const moviesListByRank = function (req, res) { let movieslist = []; le

我有一个API,可以根据请求从数据库中获取所有对象(电影)。每个对象都有几个等级,用于计算对象的一个主等级。然后将每个对象推入一个数组中。在发送JSON响应之前,将根据主评级对该数组进行排序。最高评级为排名第一

我想要的是,每个对象也有它的等级。因此,评级最高的对象也应该具有“排名”的属性:1

我只是对如何在发送回复之前实现这一点感到困惑。这是我的代码:

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。