如何将自定义排序应用于数组
How do you apply a custom sort to an array?
我想以一种自定义的方式对数组进行排序。
示例为学生的班级级别:
_.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的距离决定了顺序。为了防止出现负数,该函数取结果的绝对值,并返回该值。
相关文章:
- 在对象上迭代以验证它是否's键存在于数组中
- 如何创建独立于数组更新的组件列表
- 仅当项目没有't存在于数组中
- 检查值存在于数组位置
- 如何检查值是否存在于数组的对象中
- Javascript强制数组的行为类似于数组
- 如何将子字符串应用于数组中的每个字母
- 检查元素是否存在于数组中,而不遍历它
- Mootools每个函数只适用于数组中的最后一个基金
- 如何将类应用于数组中段落标记中的所有单词
- 将隐藏应用于数组中的第一个元素
- 将方法应用于数组中的单个元素-jquery/javascript
- 检查键存在于数组中
- 将逐位运算符应用于数组的值
- 检查变量是否存在于数组的数组中
- $.when的返回值.应用($,$.地图(数组,someFunction (x){}))
- 如何将自定义排序应用于数组
- Javascript- removeEventListener不应用于数组,从之前的addEventListener添加
- JS值应用于数组中的每个对象
- 防止css应用于数组中的第一个渲染对象