Javascript--排序对象的数组对象属性

Javascript--排序对象的数组对象属性

问题描述:

最近我建立一个小的web应用程序和我有对象,如Javascript--排序对象的数组对象属性

[ 
    { 
     id: '3', 
     semester: 'summer freshman', 
     rating: '10' 
    }, 
    { 
     id: '4', 
     semester: 'spring freshman', 
     rating: '9.5' 
    }, 
    { 
     id: '5', 
     semester: 'fall freshman', 
     rating: '10' 
    } 
] 

,我如何排序我的数据数组的指定顺序顺序为semester == fall freshman的条目最先出现,后跟条目semester == spring freshman,最后是semester == summer freshman

换句话说,有没有办法根据学期属性中的每个值排序我的对象数组对象,它遵循以下顺序:

["fall freshman", "spring freshman", "summer freshman", "fall sophomore" ...] 

谢谢!!

+0

能否请您分享您已经尝试了什么? – Rajesh

您可以使用自定义排序方法。按照您的期望顺序保存一系列的学期。然后根据学期数组对数组进行排序。

let arr = [ 
    {id: '3', semester:'summer freshman', rating: '10'}, 
    {id: '4', semester: 'spring freshman', rating: '9.5'}, 
    {id:'5', semester:'fall freshman', rating: '10'} 
] 

const semesterList = ["fall freshman", "spring freshman", "summer freshman", "fall sophomore"] 

arr.sort((a, b) => semesterList.indexOf(a.semester) - semesterList.indexOf(b.semester)) 
+0

这正是我所期待的。非常感谢!! – Yudi

您可以使用对象进行排序,并为未知值采用默认值。使用order.default,您可以获得未知值,并将零或小于零的值移动到顶部或非常大的值,如Infinity将项目移动到底部。

对于已知值,我sugghest使用的值,它是从零differen,因为零,或未知的结果产量为默认值。

var data = [{ id: '3', semester: 'summer freshman', rating: '10' }, { id: '4', semester: 'spring freshman', rating: '9.5' }, { id:'5', semester: 'fall freshman', rating: '10' }, { id:'99', semester: 'foo freshman', rating: '0' }], 
 
    semesters = ["fall freshman", "spring freshman", "summer freshman", "fall sophomore"], 
 
    order = Object.create(null); 
 
    
 
    
 
order.default = Infinity; 
 
semesters.forEach((s, i) => order[s] = i + 1); 
 

 
data.sort((a, b) => (order[a.semester] || order.default) - (order[b.semester] || order.default)); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }