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

Posted

技术标签:

【中文标题】如何按字符串中的数字对graphql查询进行排序?【英文标题】:How to sort graphql query by a number in a string? 【发布时间】:2020-02-19 21:49:21 【问题描述】:

我正在制作照片库/灯箱,并正在使用 graphql 来管理图片。

我的文件夹中有 10 张照片: "1- 图片.png", "2- 其他图片.png", "3-...", ..., "10- 我的最后一张图片.png"

我用下面的sn-p升序排序,

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- My last picture.png”、“2- Picture of other thing.png”,...

有没有一种智能的方法可以按字符串开头的数字排序?我能想到的最简单的方法是将 1-9 文件重命名为“01-...png”,但我正在尝试对包含 5-150 张照片的数千个文件夹实施此操作,所有这些都使用“1-”命名约定。

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

【问题讨论】:

重命名文件可能更有意义。 @ksav 我开始这样倾斜。我觉得这应该是可以管理的 - 我认为我想做的事情背后的逻辑是合理的。 当然一切皆有可能。但就像你说的那样,找到一种方法来批量重命名所有文件并用前导 0 填充文件名会更容易。 【参考方案1】:

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

解决方案是将 1-9 重命名为 01-09,这样 0 在 1 之前。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何按字符串中的数字对graphql查询进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

除数字外,如何按字母顺序对对象数组进行排序?

oracle 表中如何对按含有字母和数字的编号来进行排序

如何按数字顺序对字符串和数字列表进行排序?

如何按最低数字/字符串Android Studio对recyclerview进行排序

当字符串为数字时,如何在考虑值的同时按字母顺序对字符串进行排序?

当字符串是数字时,如何在考虑值的同时按字母顺序对字符串进行排序?