sort排序函数使用

sort() 方法用于对数组的元素进行排序。

1.数组在原数组上进行排序,不生成副本。

2.如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。所以如果对一串数字进行大小排序时,这样直接排序是不行的。
var arr=[2,14,34,56,76,1,3];
console.log(arr.sort());//[1, 14, 2, 3, 34, 56, 76]

3.如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。
比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

使用例子:

升序
  function ascend(a, b) {
    return a-b;
  }
降序
  function desc(a, b) {
   return b-a;
  }
 arr.sort(ascend);//[1, 2, 3, 14, 34, 56, 76]
 arr.sort(desc);//[76, 56, 34, 14, 3, 2, 1]
 
 ### 乱序排列
 
 只要让比较函数随机返回1或者-1就行了
 function random(){
 return Math.random()>0.5?-1:1;
 }
  
 arr.sort(radom);//[56, 14, 34, 2, 3, 1, 76]
 

搜索

如果要把数组里含有某个字母的元素找出来,似乎只能用遍历。但用sort()可以把符合的字符放到前面。
var arr=['df', 'rtr', 'wy', 'dafd', 'dfs', 'wefa', 'tyr', 'rty', 'rty', 'ryt', 'afds', 'wer', 'te'];
function search(a,b){
return a.indexOf(‘a’)==-1?1:-1;
}
arr.sort(search);//["afds", "dafd", "wefa", "tyr", "te", "df", "wer", "wy", "ryt", "rty", "rty", "rtr", "dfs"]

按照拼音排序

var arr=['好','是','谁','你','我'];
function byPinyin(a,b){
return a.localeCompare(b);
}
arr.sort(byPinyin);//["你", "好", "我", "是", "谁"]

localCompare方法参见:http://www.jb51.net/article/14994.htm

问题

如何实现多键值排序,像SQL语句一样?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>