如何将自定义排序应用于数组? [英] How do you apply a custom sort to an array?

查看:27
本文介绍了如何将自定义排序应用于数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望以自定义方式对数组进行排序。

例如学生的班级:

_.sortBy(["Junior","Senior","Freshman","Sophomore"], function(classlevel){  
    // ??  
})

理想情况下,排序应返回:

["Freshman","Sophomore","Junior","Senior"]

我在想,我是否可以像这样提前对班级进行预先排序:

var classlevelRanked = [{ class: "Junior",
   rank: 3
 },{ class: "Senior",
   rank: 4
 },{ class: "Freshman",
   rank: 1
 },{ class: "Sophomore",
   rank: 2
 }]

然后应用排序方式:

_.sortBy(classlevelRanked, function(classlevel){  
  return classlevel.rank;  
})

但随后我必须通过执行以下操作来剔除级别:

.map(function(classlevel){  
    return classlevel["class"];  
})

有没有更直接的方法来做到这一点,而不是预先对类级别进行排序,然后再将其剔除?

谢谢。

推荐答案

您应该能够执行以下操作:

_.sortBy(["Junior","Senior","Freshman","Sophomore"], function(element){  
    var rank = {
        "Junior" : 3,
        "Senior" : 4,
        "Freshman" :1,
        "Sophomore" :2
    };

    return rank[element];
});

小提琴:

http://jsfiddle.net/hKQj8/


或者,如果rank是可能在其他地方有用的常量,则可以在_.sortBy表达式之外定义它,并使用_.propertyOf以获得更具声明性的样式:

var rank = {
    "Junior" : 3,
    "Senior" : 4,
    "Freshman" :1,
    "Sophomore" :2
};

_.sortBy(["Junior","Senior","Freshman","Sophomore"], _.propertyOf(rank));

这篇关于如何将自定义排序应用于数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆