javascript如何按两个规则对对象数组排序?

javascript如何按两个规则对对象数组排序?,javascript,Javascript,我有一个这样的对象列表: [ {"groups":["aaa"]}, {"groups":["bbb"]}, {"groups":["ccc"]}, {"groups":["ddd"]}, {"groups":["eee"]}, {"groups":["fff"]}, {"groups":["ggg"]}, {"groups":["hhh"]}, {"groups":["iii"]},

我有一个这样的对象列表:

 [
      {"groups":["aaa"]},
      {"groups":["bbb"]},
      {"groups":["ccc"]},
      {"groups":["ddd"]},
      {"groups":["eee"]},
      {"groups":["fff"]},
      {"groups":["ggg"]},
      {"groups":["hhh"]},
      {"groups":["iii"]},
      {"groups":["mmm", "mmm"]}
      {"groups":["lll", "lll"]}
];
我想把所有包含多个组的对象按字母顺序放在列表的末尾,并将其他包含一个组的对象放在列表的开头,而不改变原始顺序

这是我的密码

var列表=[
{“组”:[“aaa”]},
{“组”:[“bbb”]},
{“组”:[“ccc”]},
{“组”:[“ddd”]},
{“组”:[“eee”]},
{“组”:[“fff”]},
{“组”:[“ggg”]},
{“组”:[“hhh”]},
{“集团”:[“iii”]},
{“组”:[“mmm”,“mmm”]},
{“组”:[“lll”,“lll”]}
];
列表.排序(函数(a,b){
var aIsGroup=(a.groups.length>1);
var bIsGroup=(b.groups.length>1);
if(aIsGroup&!bIsGroup){
返回1;
}else if(!aIsGroup&&bIsGroup){
返回-1;
}else if(aIsGroup&&bIsGroup){
返回a.groups[0].toLowerCase().localeCompare(b.groups[0].toLowerCase());
}
返回0;
});

控制台日志(列表)

Javascript的排序不能保证稳定的排序。任何“相等”的元素都有未定义的顺序。有关实现稳定排序的信息,请参见副本

但您可以这样做,使它们保持与原始顺序相同的顺序(稳定排序)

var列表=[
{“组”:[“aaa”]},
{“组”:[“bbb”]},
{“组”:[“ccc”]},
{“组”:[“mmm”,“mmm”]},
{“组”:[“ddd”]},
{“组”:[“fff”]},
{“组”:[“eee”]},
{“组”:[“ggg”]},
{“组”:[“hhh”]},
{“集团”:[“iii”]},
{“组”:[“lll”,“lll”]}
];
列表.排序(函数(a,b){
var aIsGroup=(a.groups.length>1);
var bIsGroup=(b.groups.length>1);
if(aIsGroup&!bIsGroup){
返回1;
}else if(!aIsGroup&&bIsGroup){
返回-1;
}else if(aIsGroup&&bIsGroup){
返回a.groups[0].toLowerCase().localeCompare(b.groups[0].toLowerCase());
}
//保持一致
返回(list.indexOf(a)控制台日志(列表)我不确定标准是按词汇对它们进行排序,但它们应该保留其原始顺序(即稳定排序)。@deceze您可能是对的,需要问一下op@deceze重读你正在回答的问题correct@deceze,谢谢,但只有当
(a.groups.length>1)和&(b.groups.length>1)时,我才需要字母顺序
@ar099968已编辑;)
fff
eee
是混合的,因为我在声明数组以在monoelementJavascript的
sort
上不显示词法时混合了它们。JavaScript的
sort
不能保证稳定的排序。任何“相等”的元素都有未定义的顺序。请参阅副本以实现稳定排序。为什么不先过滤多个组的条目,将它们从原始数组中删除,然后附加?@connexo好主意。@connexo为什么不将其作为一个应答将
a.groups.length>1
更改为
a.groups.length>0
b.groups.length>1
更改为
b.groups.length>0