我有一个包含对象的数组。
这些对象有一个全名属性和一个成员 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;
});
最佳答案
您可以使用按组(id
或 null
)和按名称排序。
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/