我在Algolia中有一组值精化列表都是以这种方式显示的,当我执行以下操作时sortBy: ['name:asc']

如何才能使其以预期的格式显示:
Grade 1
Grade 2
Grade 3
Grade 4
...
Grade 11
Grade 12(如果我能在所有其他值之前先得到‘幼儿园’,那就更好了!)
以下是我到目前为止拥有的代码:
search.addWidget(
instantsearch.widgets.menu({
container: '#grade_menu',
attribute: 'grades_JSON.long',
sortBy: ['name:asc'],
limit: 13,
cssClasses: {
showMore: 'btn-dark',
count: 'tiny-text',
},
templates: {
item: `
@{{label}}
@{{#helpers.formatNumber}}@{{count}}@{{/helpers.formatNumber}}
`,
},
})
);发布于 2019-01-15 01:05:48
在小部件选项中,sortBy可以给出一个函数,该函数的行为类似于Array.sort这意味着你可能会有这样的东西:
function sortGrades(a, b) {
if (a.name == "Kindergarten") {
return -1;
} else if (b.name == "Kindergarten") {
return 1;
} else {
return Number(a.name.match(/[0-9]+/)[0]) - Number(b.name.match(/[0-9]+/)[0]);
}
}
search.addWidget(
instantsearch.widgets.menu({
// ...
sortBy: sortGrades,
// ...
})
);"Kindergarten"将始终首先排序,而其他值将根据facet名称中的数字进行排序。
发布于 2021-02-26 05:14:55
我知道这是一个古老的问题,但我想分享一下我在
refinementList小工具。
function sortAges(a, b) {
var ordering = {},
sortOrder = ['0 - 6 months','0 - 1','2 - 5','6 - 8','9 - 11','12 - 17','18+','0-19','All ages'];
for (var i=0; ifor:
instantsearch.widgets.refinementList({
container: '#ages-list',
attribute: 'ages',
sortBy: sortAges
}),https://stackoverflow.com/questions/54121550
复制相似问题