Javascript 为什么我的代码在map函数之后跳过sort函数?
当我从我的mongo db中检索到每个用户提交的帖子时,我试图给每个用户分配一个分数。我完成了整个过程,并成功地在新的posts对象数组中添加了“score”属性。现在,我想根据这个分数对帖子进行排序。我试图使用一个简单的比较函数,但我的代码似乎甚至没有使用这个函数 我没有收到错误或任何打印到控制台的内容。我得到的只是数组中的posts对象,并分配了score属性 为什么我的代码跳过了这个排序函数 先谢谢你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(
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
我没有从函数中得到任何东西…不管我输入了什么。没有打印出来。没有错误。我肯定它没有被击中。