如何按字符串中的数字对graphql查询进行排序?

时间:2019-10-23 15:31:33

标签: graphql gatsby graphql-js gatsby-image

我正在制作一个照相馆/灯箱,并正在使用graphql管理图片。

我的文件夹中有10张照片: “ 1- Picture.png”,“ 2-other.png的图片”,“ 3 -...”,...,“ 10-我最后一张picture.png”

我正在使用以下代码段按升序排序

export const query = graphql`
  query($gallery: String!) {
    allFile(
      filter: {
        sourceInstanceName: { eq: "galleries" }
      absolutePath: { glob: $gallery }
      }
      sort: { fields: name, order: ASC }
    ) {
      nodes {
        name
        childImageSharp {
          fluid(maxWidth:1920, quality:90) {
            ...GatsbyImageSharpFluid
          }
        }
      }
    }
  }
`

但是输出顺序是“ 1- Picture.png”,“ 10-我最后一张picture.png”,“ 2-其他thing.png图片”,...

是否存在一种智能的方式来对字符串开头的数字进行排序?我能想到的最简单的方法是将1-9文件重命名为“ 01 -... png”,但我正在尝试对包含5-150张照片的数千个文件夹实施此操作,并全部使用“ 1-”命名惯例。

如何对这些照片进行排序,以使“ 10- My last picture.png”之前列出“ 9- Some name.png”?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,从技术上讲,11 排在 2 之前,因为排序是按字母顺序排列的,而 1 排在 2 之前。排序基于第一个字符,然后是排序中需要的字符。

解决方案是将 public class HomeController : Controller { private readonly ILogger<HomeController> _log; // A suitable logger instance is created by the runtime DI: public HomeController(ILogger<HomeController> log) { _log = log; _log.Debug("Test"); } } 重命名为 1-9,这样 0 在 1 之前。

答案 1 :(得分:0)

我无法按查询对结果进行排序,但我通过对结果对象数组进行排序来决定按字符串中的数字排序的相同问题:

queryResult.sort(function(a,b){
  return Number(b.PriceString) - Number(a.PriceString);
});