У меня проблемы с сортировкой глубоко вложенного массива объектов с использованием 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
находится не в середине, как ожидалось, потому что он учитывает чувствительность к регистру. Не только это, но и список, по-видимому, также в обратном порядке относительно ожидаемого порядка.
Что я здесь не так делаю и как я могу получить это, чтобы игнорировать регистр?