Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 为什么我的代码在map函数之后跳过sort函数?_Javascript_Node.js_Mongodb_Sorting - Fatal编程技术网

Javascript 为什么我的代码在map函数之后跳过sort函数?

Javascript 为什么我的代码在map函数之后跳过sort函数?,javascript,node.js,mongodb,sorting,Javascript,Node.js,Mongodb,Sorting,当我从我的mongo db中检索到每个用户提交的帖子时,我试图给每个用户分配一个分数。我完成了整个过程,并成功地在新的posts对象数组中添加了“score”属性。现在,我想根据这个分数对帖子进行排序。我试图使用一个简单的比较函数,但我的代码似乎甚至没有使用这个函数 我没有收到错误或任何打印到控制台的内容。我得到的只是数组中的posts对象,并分配了score属性 为什么我的代码跳过了这个排序函数 先谢谢你 postDB.connect .then(db => db.collection(

当我从我的mongo db中检索到每个用户提交的帖子时,我试图给每个用户分配一个分数。我完成了整个过程,并成功地在新的posts对象数组中添加了“score”属性。现在,我想根据这个分数对帖子进行排序。我试图使用一个简单的比较函数,但我的代码似乎甚至没有使用这个函数

我没有收到错误或任何打印到控制台的内容。我得到的只是数组中的posts对象,并分配了score属性

为什么我的代码跳过了这个排序函数

先谢谢你

postDB.connect
.then(db => db.collection("posts").find().forEach(function(posts) {


    var postsArr = [];
    postsArr.push(posts);


    function generateScore(postWithoutScore) {


        var timeSince = (((Date.now()/1000) - postWithoutScore.e) * 0.000277778);

        var hh = ((postWithoutScore.upvote - 1)/Math.pow(timeSince + 2, 1.8)).toFixed(2);

        return hh;
    }

    var postsWithScore = postsArr.map(function(post) {
        // console.log(post);
        return Object.assign({}, post, {
            score: generateScore(post)
        })
    });


    postsWithScore.sort(function (a, b){

        console.log(b);
        console.log(a);

        return b[i].score - a[i].score;

    });

    console.log(postsWithScore);


    })
    .then(posts => {
       console.log(posts);
       res.render("projects", {
          posts: posts
       })
     })
     .catch(next))
     });

我认为您的代码在语法上有一个错误-括号可能在错误的位置…我尝试在下面重新排列它,看看您是否能得到一些输出:

postDB.connect
.then(db => db.collection("posts").find().forEach(function(posts) {

    var postsArr = [];
    postsArr.push(posts);


    function generateScore(postWithoutScore) {


        var timeSince = (((Date.now()/1000) - postWithoutScore.e) * 0.000277778);

        var hh = ((postWithoutScore.upvote - 1)/Math.pow(timeSince + 2, 1.8)).toFixed(2);

        return hh;
    }


    var postsWithScore = postsArr.map(function(post) {
        // console.log(post);
        return Object.assign({}, post, {
            score: generateScore(post)
        })
    });

    postsWithScore.sort(function (a, b){

        console.log(b);
        console.log(a);

        return b[i].score - a[i].score;

    });

    console.log(postsWithScore);


    }
  )
)
.then(posts => {
       console.log(posts);
       res.render("projects", {
          posts: posts
       })
     })
.catch(next);

您是否在
控制台中收到错误?似乎
i
未定义。
i
未在排序回调中定义。您的控制台日志应该建议使用
a.score
b.score
我没有从函数中得到任何东西…不管我输入了什么。没有打印出来。没有错误。我肯定它没有被击中。