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

How do you apply a custom sort to an array?

本文关键字:应用于 数组 排序 自定义      更新时间:2023-09-26

我想以一种自定义的方式对数组进行排序。

示例为学生的班级级别:

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

除了Jason的回答:

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

这将有助于排序数组的对象

7年后,但这样做更干净。

const order = ["Freshman", "Sophomore", "Junior", "Senior"];
_.sortBy(data, (o) => order.indexOf(o));

用超级粗俗/糟糕的方式!!!!非常简单/非常混乱:)

function rank(word){
    return Math.abs(113-word.trim().toLowerCase().charCodeAt(1));
}
console.log(rank('freshman')); // 1
console.log(rank('sophomore')); // 2
console.log(rank('junior')); // 4
console.log(rank('senior')); // 12
编辑:

既然人们似乎发现这个答案很有用,这里解释一下它是如何工作的…它根据所提供的单词中的一个字母进行排序。因为"大二"answers"大四"有重复的第一个字母,所以我选择按第二个字母排序,每个单词都有一个唯一的值。

然后按顺序排列:sEnior,大二,大一,jUnior。为了对它们进行正确排序,我使用Q(113)的字符代码进行减法,它就在R(新生)的旁边。这意味着每个单词的第二个字母与Q的距离决定了顺序。为了防止出现负数,该函数取结果的绝对值,并返回该值。