Javascript 使用ramda-sortWith进行不区分大小写的排序

Javascript 使用ramda-sortWith进行不区分大小写的排序,javascript,reactjs,sorting,ramda.js,Javascript,Reactjs,Sorting,Ramda.js,我在使用Ramda sortWith按多列升序或降序对深度嵌套的对象数组进行排序时遇到问题。显然,排序是区分大小写的,并导致将以小写字母开头的值放在排序数组的最末尾 首先,我导入必要的ramda函数: import { sortWith, path, useWith, split, ascend, descend } from 'ramda' 那么我有这个数组: const theList = [ { name: 'A', purchase: { period:

我在使用Ramda sortWith按多列升序或降序对深度嵌套的对象数组进行排序时遇到问题。显然,排序是区分大小写的,并导致将以小写字母开头的值放在排序数组的最末尾

首先,我导入必要的ramda函数:

import { sortWith, path, useWith, split, ascend, descend } from 'ramda'
那么我有这个数组:

const theList = [
  {
    name: 'A',
    purchase: {
      period: {
        start: '2020-01-08T21:00:00Z',
        end: '3070-10-27T21:00:00Z',
      },
    },
  },
  {
    name: 'b',
    purchase: {
      period: {
        start: '2019-09-30T19:00:00Z',
        end: '3070-10-27T21:00:00Z',
      },
    },
  },
  {
    name: 'C',
    purchase: {
      period: {
        start: '2020-01-26T21:00:00Z',
        end: '3070-10-27T21:00:00Z',
      },
    },
  },
]
对于排序,我有一个带有规则的数组:

const sort = [
  { oder: 'asc', name: 'name' },
  { oder: 'desc', name: 'purchase.period.start' },
]
最后,我尝试使用给定的规则集对该数组进行排序:

const sortFunctions = sort.map(({ order, name }) => (
  (order === 'asc')
    ? ascend(useWith(path, [split('.')])(name))
    : descend(useWith(path, [split('.')])(name))
))

return sortWith(sortFunctions)(theList)
然而,结果如下:

[
  {
    "name": "b",
    "purchase": {
      "period": {
        "start": "2019-09-30T19:00:00Z",
        "end": "3070-10-27T21:00:00Z"
      }
    }
  },
  {
    "name": "C",
    "purchase": {
      "period": {
        "start": "2020-01-26T21:00:00Z",
        "end": "3070-10-27T21:00:00Z"
      }
    }
  },
  {
    "name": "A",
    "purchase": {
      "period": {
        "start": "2020-01-08T21:00:00Z",
        "end": "3070-10-27T21:00:00Z"
      }
    }
  }
]
所以这里的问题是B不在预期的中间,因为它考虑了事例的敏感性。不仅如此,列表的顺序似乎与预期的顺序相反


我在这里做错了什么?我怎样才能让它忽略大小写敏感度?

使用管道而不是useWith略微修改了代码版本,我希望尽可能避免这种情况,我们可以在比较器内部添加toLower,如下所示:

const makeSorter=compose sortWith, 映射{order,name}=>order=='desc'?下降:上升 组合到下面,路径拆分“.”,名称 常量排序=[ {顺序:'asc',名称:'name'}, {订单:'desc',名称:'purchase.period.start'}, ] //切换顺序以使排序清晰 constthelist=[{name:C,购买:{period:{start:2020-01-26T21:00:00Z,end:3070-10-27T21:00:00Z}},{name:A,购买:{period:{start:2020-01-08T21:00:00Z,end:3070-10-27T21:00:00Z},{name:b,购买:{period:{start:2019 09-309:00:00Z,end:3070-10-27T21:00}] 控制台日志 makeSorter对列表进行排序 const{compose,sortWith,map,ascend,down,toLower,path,split}=R