在不更改顺序的情况下对数组进行排序
Sort array without changing order
我正试图在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
,我最终会根据它们的值来恢复我的组,这不是我想要的,它们的顺序应该保持。
编辑:考虑到答案,我想再次澄清,我确实而想要更改组的顺序,这意味着它们应该不按字母顺序排序,而是应该按出现的顺序分组。
您需要为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);
试试这个:
function compare(b,c) {
if (b.title < c.title)
return -1;
if (b.title > c.title)
return 1;
return 0;
}
objs.sort(compare);
您可以尝试使用类似以下的比较函数:
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
排序。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序