【问题标题】:Why is my code skipping over my sort function after my map function?为什么我的代码在我的 map 函数之后跳过了我的排序函数?
【发布时间】:2017-09-19 04:28:36
【问题描述】:

我正在尝试为每个用户提交的帖子分配一个分数,因为我从我的 mongo db 中检索它。我经历了整个过程并成功地在我的新帖子对象数组中添加了一个“分数”属性。现在,我想根据该分数对帖子进行排序。我正在尝试使用一个简单的比较功能,但似乎我的代码甚至没有达到这个功能。

我没有收到错误或任何打印到控制台的内容。我得到的只是一个数组中的帖子对象,并分配了一个 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))
     });

【问题讨论】:

  • 您在console 中遇到错误吗?似乎i 将是未定义的。
  • i 未在排序回调中定义。您的控制台日志应建议使用 a.scoreb.score
  • 我没有从函数中得到任何东西......我输入了什么都没有关系。没有打印出来。没有错误。我很肯定它没有被击中。

标签: javascript node.js mongodb sorting


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2021-08-06
    • 2014-09-13
    • 2020-02-27
    • 2015-06-03
    相关资源
    最近更新 更多