【问题标题】:Javascript-- sort an array of objects with a specified order of object propertiesJavascript——按对象属性的指定顺序对对象数组进行排序
【发布时间】:2018-02-07 18:11:19
【问题描述】:

最近我正在构建一个小型网络应用程序,并且我有一个对象数组,例如

[
    {
        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" ...]

谢谢!!

【问题讨论】:

  • 您能分享一下您的尝试吗?

标签: javascript arrays sorting javascript-objects


【解决方案1】:

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

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))

【讨论】:

  • 这正是我想要的。非常感谢!!
【解决方案2】:

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

对于已知值,我建议使用一个不同于零的值,因为零或未知结果会产生默认值。

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; }

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多