我正在尝试为每个用户提交的帖子分配一个分数,因为我从我的mongo db中检索它。我完成了整个过程,并成功地在我的新帖子对象数组中添加了一个“得分”属性。现在,我想根据该分数对帖子进行排序。我试图使用一个简单的比较函数,但似乎我的代码甚至没有达到这个功能。
我没有收到错误或打印到控制台的任何内容。我得到的只是我在一个分配了分数属性的数组中的帖子对象。
为什么我的代码会跳过此排序功能?
提前谢谢。
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 :(得分: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);