我试图在JS中找到一种方法来排序数组,而不是实际更改元素的顺序,而是更像是“分组”功能。
示例数据:
[
{group: 'test', title: 'A'},
{group: 'test', title: 'B'},
{group: 'test2', title: 'C'},
{group: 'test', title: 'D'}
]
我的想法是按照最终订单的方式[].sort()
进行:
[
{group: 'test', title: 'A'},
{group: 'test', title: 'B'},
{group: 'test', title: 'D'},
{group: 'test2', title: 'C'}
]
意思是:我没有改变前两个项目的顺序,但由于他们的小组只改变了#3和#4。如果我使用经典的localeCompare
,我最终会根据他们的价值恢复我的团队,这不是我想要的,他们的订单应该保留。
编辑:考虑到答案,我想重新澄清我不想要更改组的顺序,意味着他们不按字母顺序排序但是相反,它们应按照它们出现的顺序进行分组。
答案 0 :(得分:0)
您需要为Array.sort
提供自定义比较功能var a = [
{group: 'test', title: 'A'},
{group: 'test', title: 'B'},
{group: 'test2', title: 'C'},
{group: 'test', title: 'D'}
];
function myComparisonFunction(a1, b1) {
return a1.group < b1.group ? -1 : a1.group === b1.group ? 0 : 1;
}
a.sort(myComparisonFunction);
console.log(a);
答案 1 :(得分:0)
试试这个:
function compare(b,c) {
if (b.title < c.title)
return -1;
if (b.title > c.title)
return 1;
return 0;
}
objs.sort(compare);
答案 2 :(得分:0)
您可以尝试使用与此类似的比较功能:
function comp(a, b) {
if (a.group == b.group) {
return a.title < b.title ? -1 : a.title == b.title ? 0 : 1;
}
return a.group < b.group ? -1 : 1;
}
youArray.sort(comp)
如果我正确理解了您的问题,您希望先对群组进行排序,但如果您的群组相同,则排序title
。