2017-08-30 227 views
1

最近我建立一個小的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

回答

4

您可以使用自定義排序方法。按照您的期望順序保存一系列的學期。然後根據學期數組對數組進行排序。

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

0

您可以使用對象進行排序,併爲未知值採用默認值。使用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; }

相關問題