1.代码讲解

var arr = [4,21,5,10,3];
//创建一个数组,方便实验。
Array.prototype.sorts = function(){
//给Array类增加sorts方法
    var _this = this;
    //把this指向存储起来,当前this指向Array(也就是调用sorts方法的数组,Array实例)
    for(var i=0;i<_this.length-1;i++){
    //遍历Array(实例)里的每个元素.为什么-1,因为第一遍循环的时候最大的数字已经被换到最后一位去了,所以可以少做一次循环.
        for(var k=0;k<_this.length-i-1;k++){
        //这边循环-1和上面-1是同样的道理,但是-i呢。因为当i=0时,最大一位数已经到最后去了,i=1第二大的数字也到最后第二位去了,所以没有必要再去比较后面已经排完序的数字了.
            if(_this[k] > _this[k+1]){
            //这边是冒泡排序的核心,当左边数字比右边数字大的时候,执行以下代码.
            //这边大于>改为小于的话,排序就会倒过来,你不妨可以试试.
                var temp = _this[k];
                //声明变量temp,把左边的元素赋值给它.假设左边的元素是A,temp就等于A了.
                _this[k] = _this[k+1];
                //右边的元素赋值给左边的元素.假设右边的元素为B,那_this[k]就等于B了.
                _this[k+1] = temp;
                //把temp元素赋值给右边的元素,那右边的元素_this[k+1]就等于A了.
                //最后的效果就是左边的元素_this[k]为B,右边的元素_this[k+1]为A,它们互相换了位置.
            }
        }
    }
    return _this;
    //最后返回这个数组
}
console.log(arr.sorts());
//打印出[3.4.5.10.21];

2.代码运行

i=0时:[4,5,10,3,21],
i=1时:[4,5,3,10,21],
i=2时:[4,3,5,10,21],
i=3时:[3,4,5,10,21].

3.补充

上面的代码举例是数字,其实也可以对字母进行排序,比如["d","a","c"].sorts().打印出来就是["a","c","d"].字母的大小比较是来自于ASCLL码,每一个字母都有自己的一个ASCLL码,有兴趣的朋友可以去了解下.


徐鹏云
353 声望5 粉丝

null == undefined null !== undefined