首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按类别过滤文章,以找出准确的分页页数(JS)

如何按类别过滤文章,以找出准确的分页页数(JS)
EN

Stack Overflow用户
提问于 2019-01-05 21:44:39
回答 1查看 68关注 0票数 0

在我的Gatsby JS网站中,我对文章进行了分类,我设法为每个类别创建了一个页面,并根据页面上显示的最大文章数量对每个页面进行分页。问题是,我的代码不是计算每个类别的现有页面的确切数量,而是计算现有页面的总量(基于所有文章,而不是按类别计算文章)。

代码如下:

gatsby-node.js

代码语言:javascript
复制
let categories = []
 _.each(result.data.allMarkdownRemark.edges, edge => {
     if (_.get(edge, "node.frontmatter.categories")) {
        categories = categories.concat(edge.node.frontmatter.categories)
        }
    })

    const categoryarticles = categories.filter(category =>{
        return category === category
    })

    const categoryarticlesPerPage = 6
    const numPages = Math.ceil(categoryarticles.length / categoryarticlesPerPage)

    //Creating a PAGINATED page for each category, so that any category page will only display a certain amount of articles (defined in categoryarticlesPerPage)
    Array.from({ length: numPages }).forEach((el, i) => {
        categories.forEach(category => {
            createPage({
                path: i === 0 ? `/${_.kebabCase(category)}` : `/${_.kebabCase(category)}/${i + 1}`,
                component: categoryTemplate,
                context: {
                    category,
                    limit: categoryarticlesPerPage,
                    skip: i * categoryarticlesPerPage,
                    numPages,
                   currentPage: i + 1,
                },
          })
      })
 })

这个错误无疑存在于const分类文章中。

期望的结果是按类别计算文章的数量,以便类别分页开始正常工作(现在,它创建的页面比所需的页面多,因为它考虑到网站上存在的文章总数)。

有什么线索吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-05 21:46:50

代码语言:javascript
复制
const categoryarticles = categories.filter(category =>{
  return category === category
})

由于category === category始终为true,因此始终返回整个数组。其中一个category变量应该是不同的。您可能需要对articles进行过滤。

此外,这似乎是_.flatMap的完美工作,如下所示:

代码语言:javascript
复制
const categories = _.flatMap(result.data.allMarkdownRemark.edges, edge => {
  return _.get(edge, "node.frontmatter.categories", []);
});

// get articles from somewhere
const categoryarticles = articles.filter(category => {
  return article.category === category;
});

如果您想要统计每个类别的文章数量,可以使用_.countBy,如下所示:

代码语言:javascript
复制
const categoryWiseArticleCount = _.countBy(articles, article => {
  // return the article category here
  return article.category;
});

console.log(categoryWiseArticleCount);
// {
//   category_1: 7,
//   category_2: 10,
// }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54052621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档