2017-04-22 36 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); 
相關問題