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" ...]
谢谢!!
答
您可以使用自定义排序方法。按照您的期望顺序保存一系列的学期。然后根据学期数组对数组进行排序。
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; }
能否请您分享您已经尝试了什么? – Rajesh