原生JS数组方法——reverve()slice()concat()sort()

Posted bxbxb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生JS数组方法——reverve()slice()concat()sort()相关的知识,希望对你有一定的参考价值。

reverve

数组的倒序方法

Array.prototype.reverse = function(){
    //用二分法
    for(var i=0;i<this.length/2;i++){
        //解构赋值
        [this[i],this[this.length-1-i]] = [this[this.length-1-i],this[i]]
    }
    return this
}

slice

数组截取,不改变原数组,并把截取的新数组返回出去

Array.prototype.Slice =function(n=0,m=this.length){
if(n<=0&&m<0&&this.length+n>this.length+m){
      return [];
  }
  n<0?n = this.length + n:n;
  m<0?m = this.length + m:m;
  m>this.length?m=this.length:m;
  let res =[];
  for(var i=n;i<m;i++){
      res[res.length]=this[i];
  }
  return res;
}

concat

数组拼接,支持单个参数和数组

Array.prototype.concat=function(){
    let res=[];
    for(var j=0;j<this.length;j++){
        res[res.length]=this[j]
    }
    for(var i=0;i<arguments.length;i++){
        if({}.toString.call(arguments[i]) === [object Array]){
            for(var z=0;z<arguments[i].length;z++){
                res[res.length]=arguments[i][z]
            }
        }else{
            res[res.length]=arguments[i]
        }

    }
    return res;
}

sort

主要利用冒泡,不传参按照数字第一位排序,传参,a-b升序b-a倒序

Array.prototype.sort=function(compare){
    //判断传入的是不是函数
      if(typeof compare !== "function"&& compare !== undefined){
        throw new Error( " The comparison function must be either a function or undefined" +
            "at Array.sort (native)" );
    }
     for (var i = 0; i < this.length-1; i++) {
        for (var j = 0; j < this.length-1-i; j++) {
            //传入回调函数走这里
            if(compare){
                //a-b和b-a都是大于0才换位置
                if(compare(this[j],this[j+1])>0){
                    [this[j],this[j+1]] = [this[j+1],this[j]]
                }
                //不传回调走这里,按首个数字排序
            }else{
                if((this[j]+"")[0] - (this[j+1]+"")[0] > 0 ){
                    [this[j],this[j+1]] = [this[j+1],this[j]]
                }
            }

        }
    }
}

以上是关于原生JS数组方法——reverve()slice()concat()sort()的主要内容,如果未能解决你的问题,请参考以下文章

浅谈用原生 js 实现数组的 slice 方法

JS中数组方法的封装之slice

区分数组的splice,split,slice方法

Jsの练习-数组常用方法 -slice()

js中选定元素slice()

js数组的splice方法和slice方法的区别