如何从数组中获取上一个和下一个ID

时间:2018-07-18 07:54:51

标签: javascript node.js

我正在尝试为博客页面创建下一个和上一个按钮。我的博客文章存储在MySQL数据库的表中。目前,我得到以下结果。

因此我可以获得当前ID 当前标题,但是我不确定如何在页面上显示上一个和下一个。

JavaScript代码:

router.get('/posts/:permalinkSlug', async(req, res, next) => {
  try {
    var blogPostArray = []
    var results = await _db.rawSql('SELECT id, permalink_slug FROM blog_posts')
    blogPostArray.push(results)

    const permalinkSlug = req.params.permalinkSlug
    const post = await postTools.getPostByPermalinkSlug(permalinkSlug)
    res.locals.current_id = post.id
    console.log(res.locals.current_id)
    console.log(permalinkSlug)

    for (i = 0; i < blogPostArray.length; i++) {
      console.log(blogPostArray[i])
    }

    if (post) {
      res.render('post/post', {
        post: post,
        page: await _db.findOne('posts', {})
      })
    } else next()
  } catch (err) {
    next(err)
  }
})

新代码:

var results = await _db.rawSql('SELECT id FROM blog_posts')
console.log(results)

结果:

[
  RowDataPacket { id: 12 },
  RowDataPacket { id: 13 },
  RowDataPacket { id: 14 },
  RowDataPacket { id: 15 } 
]

1 个答案:

答案 0 :(得分:1)

如果res.locals.current_id提供了一个值,那么下面的方法就可以解决问题。

像这样替换此代码:

blogPostArray.push(JSON.parse(JSON.stringify(results)));

这是一个错误的here方法。

var blogPostArray = [{
    id: 12,
    permalink_slug: 'title1'
  },
  {
    id: 13,
    permalink_slug: 'title2'
  },
  {
    id: 14,
    permalink_slug: 'title3'
  },
  {
    id: 15,
    permalink_slug: 'title4'
  }
];
var res = {
  locals: {
    current_id: 14
  }
};
var index = blogPostArray.findIndex(x => Number(x.id) == Number(res.locals.current_id));
var next = getNext(index);
var prev = getPrev(index);
console.log(prev, next);

function getNext(sr) {
  sr = Number(sr);
  if (sr + 1 == blogPostArray.length) {
    return {}
  }
  return blogPostArray[sr + 1];//if not working try using blogPostArray[0][sr + 1] or blogPostArray[1][sr + 1]
}

function getPrev(sr) {
  sr = Number(sr);
  if (sr - 1 == -1) {
    return {}
  }
  return blogPostArray[sr - 1];//if not working try using blogPostArray[0][sr - 1] or blogPostArray[1][sr - 1]
}

在循环内,您可以使用以下代码:

for (i = 0; i < blogPostArray.length; i++) {
  console.log(getNext(i))
  console.log(getPrev(i))
}