2017-04-22 38 views
0

我想分配一个分数给每个用户提交的帖子,因为我从我的mongo数据库中检索它。我经历了整个过程,并在我的新的posts对象数组中成功添加了'score'属性。现在,我想根据该分数对帖子进行排序。我试图使用一个简单的比较函数,但它似乎我的代码甚至没有击中这个函数。为什么我的代码在我的map函数之后跳过我的排序函数?

我没有收到错误或任何打印到控制台。我得到的是我的帖子对象在分配属性的数组中。

为什么我的代码跳过这种排序功能?

预先感谢您。

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)) 
    }); 
+0

你在'console'中遇到错误吗?看起来像'我'将是未定义的。 –

+1

'我'没有在排序回调中定义。您的控制台日志应该建议使用'a.score'和'b.score' – charlietfl

+0

我没有从功能中得到任何东西......无所谓我放入什么东西,没有打印出来。没有错误。我认为它没有被击中。 –

回答

0

我觉得你的代码的语法有错误 - 括号内是在错误的地方,也许....我试图重新安排如下它,看看你得到一些输出工作:

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); 
相关问题