对于排序的方法,我们知道很多种。但实际应用中,最麻烦的不是排序本身,因为几乎所有语言都提供了排序的函数。而麻烦的是不经需要排序,还需要把一些附带的数据的位置也跟着重新排列。
比如我们有很多学生的资料。每个学生是一个对象,然后这些对象按一定顺序放在一个数组里面。我们一会儿想按照学生成绩来排列这些对象,一会儿想按照学生身高来排列。那么有些什么思路来实现这类操作呢:
- 把要比较的量单独组成一个数组。对这个数组排序,但要求排序的函数能够提供排序后的下表索引对应。也就是排序前后下标的对应。然后我们根据这个对应来重新排列所有对象。如果排序函数不能提供下标对应,可以排序后,进行一遍搜索,按照值把对应关系简历起来。
- 如果使用的语言提供了sort函数,并且可以把自定义的比较两个元素大小的函数传入给sort。这样我们可以只用对象的某一些成员来比较,但最终把整个对象都排序了。
data.sort(function (left, right) {
return left['level'] < right['level'] ? -1 : 1;
})