我在{<1>}时以这种方式显示的Algolia 优化列表中有一组值:
如何将其显示为预期格式:
sortBy: ['name:asc']
(如果我能先获得“幼儿园”的所有其他值,那就更好了!)
这是我到目前为止的代码:
Grade 1
Grade 2
Grade 3
Grade 4
...
Grade 11
Grade 12
答案 0 :(得分:0)
在窗口小部件选项中,可以为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"
将始终排在第一位,而其他值将根据构面名称中的数字进行排序。
答案 1 :(得分:0)
我知道这是一个老问题,但我想我会分享我曾经在 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; i<sortOrder.length; i++)
ordering[sortOrder[i]] = i;
return (ordering[a.name] - ordering[b.name]) || a.name.localeCompare(b.name);
}
用于:
instantsearch.widgets.refinementList({
container: '#ages-list',
attribute: 'ages',
sortBy: sortAges
}),