如何将自定义排序应用于数组?

2022-07-01 00:00:00 javascript underscore.js

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

例如学生的班级:

_.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));

相关文章