javascript - 如何按两个属性对数组进行排序 - 按字母顺序排列但末尾为空值?

标签 javascript arrays sorting

我有一个包含对象的数组。

这些对象有一个全名属性和一个成员 ID。

虽然全名始终可用,但如果他或她是潜在成员(member)但尚未注册,则成员(member) ID 可以为空。

结果应该如下所示:

{ id: 1122, name: Adrianna Budzinski }
{ id: 3785, name: Amy Divine }
{ id: 1555, name: Gale Purdue }
{ id: 1920, name: Rex Feng }
{ id: 2010, name: Samella Vizcaino }
{ id: null, name: Bethanie Weaver }
{ id: null, name: Celesta Gullo }
{ id: null, name: Darrick Fort }
{ id: null, name: Edmundo Boulanger }
{ id: null, name: Freddie Lanclos }
{ id: null, name: Gregory Lickteig }
{ id: null, name: Gwendolyn Cuadra }
{ id: null, name: Krystal Brosnahan }
{ id: null, name: Lahoma Pagani }
{ id: null, name: Senaida Risk }
{ id: null, name: Valarie Lopes }

有 id 的成员应该按名字排在最前面,没有 id 的成员也应该按名字排在后面。

到目前为止我实现的是两个独立的排序函数,但我不知道如何合并它们。

let sortedFriends = friends.sort(function(a, b){
  if(a.name < b.name) return -1;
  if(a.name > b.name) return 1;
  return 0;
});

sortedFriends = sortedFriends.sort(function(a, b){
  if(a.id === null) return 1;
  if(b.id === null) return -1;
  if(a.id === b.id) return 0;
  if(a.id < b.id) return -1 ;
  if(a.id < b.id) return 1;
});

最佳答案

您可以使用按组(idnull)和按名称排序。

var array = [{ id: null, name: 'Darrick Fort' }, { id: null, name: 'Edmundo Boulanger' }, { id: 1122, name: 'Adrianna Budzinski' }, { id: null, name: 'Freddie Lanclos' }, { id: null, name: 'Gregory Lickteig' }, { id: null, name: 'Gwendolyn Cuadra' }, { id: 2010, name: 'Samella Vizcaino' }, { id: null, name: 'Bethanie Weaver' }, { id: null, name: 'Celesta Gullo' }, { id: 3785, name: 'Amy Divine' }, { id: null, name: 'Krystal Brosnahan' }, { id: null, name: 'Lahoma Pagani' }, { id: 1920, name: 'Rex Feng' }, { id: 1555, name: 'Gale Purdue' }, { id: null, name: 'Senaida Risk' }, { id: null, name: 'Valarie Lopes' }];

array.sort(function (a, b) {
    return (a.id === null) - (b.id === null) || a.name.localeCompare(b.name);
});

console.log(array);

关于javascript - 如何按两个属性对数组进行排序 - 按字母顺序排列但末尾为空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724077/

相关文章:

arrays - 查找数组的所有键唯一排列

javascript - 对对象数组进行排序(输出数据但不按顺序)

java - 错误: incompatible types when passing an array to another method

excel - VBA:使用宏对工作表进行排序

java - Lucene 地理距离排序性能

javascript - 多客户端 Node.js 应用程序的 mocha-casperjs headless 测试

javascript - 条件中的类型强制更危险吗?

javascript - 模拟 angularjs http 请求

javascript - 每两回合交换玩家 JavaScript - AngularJS

java - Android Java ArrayList 尽可能大的尺寸