数组常用的方法

一.改变原数组
reserve,sort,push,pop,unshift,shift,splice
二.不改变原数组
forEach、filter、map、reduce、reduceRight、slice、concat、join、split、toString
1.push
在数组的最后一位添加数据,可以添加一个或多个


image.png

在原型上重写,实现push原理

Array.prototype.push = function() {
    for(var i = 0; i < arguments.length; i++) {
        this[this.length] = arguments[i]
    }
}
image.png

2.pop
把最后一位剪切出去


image.png
Array.prototype.newPop = function() {
    var newArr = [];
    newArr[0] = this[length - 1]
    for(var i = 0; i < this.length - 1; i++) {
        this[i] = this[i];
    }
    return this.length--;
}
image.png

3.unshift
从第一位开始添加数据


image.png

实现原理思路:
创建一个空数组newArr接收unshif()传入的参数
将调用unshift()的数组添加到newArr的末尾
这时newArr[unshift传入的参数,调用的数组],已达到效果
严谨起见,再将newArr数组赋给被调用函数,最后返回被调用函数

Array.prototype.unshif = function() {
    //创建空数组
    var newArr = [];
    //将unshif中的参数添加到newArr中
    for(var i = 0; i < arguments.length; i++) {
        newArr[i] = arguments[i];   
    } 
    var len = newArr.length;
    //将调用unshif的数组添加到newArr的末尾
    for(var i = 0 ; i < this.length ; i++) {
        newArr[i + len] = this[i]
    } 
    //将newArr赋给调用unshif的数组
    for(var i = 0; i < newArr.length; i++) {
        this[i] = newArr[i]
    } 
    return this.length;
}

image.png

4.shift
删除第一位的数据


image.png
Array.prototype.shif = function() {
    var newArr = [];
    newArr[0] = this[0]
    for(var i = 1; i < this.length; i++) {
        this[i - 1] = this[i];
    }

    this.length--;
    return newArr
}

image.png

5.reverse
逆反


image.png
Array.prototype.newReverse = function() {
    var len = this.length;
    var l = Math.floor(len / 2);
    var newLen = len - 1
    for(var i = 0 ; i < l; i++) {
        var arr = [];
        arr[0] = this[i]; 
        this[i] = this[newLen];
        this[newLen] = arr[0];
        newLen--; 
    }
    return this;
}
image.png

6.splice()
剪切
splice(从第几位开始剪切,截取多少长度,在切口处添加新数据


image.png

7.sort()
给数组排序


image.png

sort的排序是根据asc码排序的
image.png

所以,系统给我们留了接口,按照规则就可以自行修改顺序
规则:
1.必须写两个参数(a,b)

2.看返回值return
当return负数时,那么前面的数放在前面 a,b
当return正数时,那么前面的数放在后面 b,a
举例:
a,b就是arr中对应位置上的参数,类似冒泡排序
比较过程:
var arr = [7,3,2,15];
a是arr[0]上的数,b是arr[1]上的数,a>b,前面的数放在后面 b,a [3,7,2,15];
a是arr[0]上的数,b是arr[2]上的数,a>b,前面的数放在后面 b,a [2,7,3,15];
a是arr[0]上的数,b是arr[3]上的数,a<b,前面的数放在前面 a,b [2,7,3,15];
a是arr[1]上的数,b是arr[2]上的数,a<b,前面的数放在前面 b,a [2,3,7,15];
a是arr[1]上的数,b是arr[3]上的数,a<b,前面的数放在前面 a,b [2,3,7,15];
以此类推~

var arr = [1,3,23,15,2];
arr.sort(function(a,b) {
    // if(a > b) {
    //     return 1;
    // }else{
    //     return -1;
    // }
    //简化成
    return a - b;
})
image.png

降序:

var arr = [1,3,23,15,2];
arr.sort(function(a,b) {
    // if(b > a) {
    //     return 1;
    // }else{
    //     return -1;
    // }
    //简化成
    return b - a;
})
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从事前端已经两年的时间,发现我们在原生开发就是在玩数组的操作,今天在这个我把数组常用的方法进行终结,希望对从事前端...
    博_c25a阅读 786评论 0 0
  • 改变原数组push,pop,shift,unshift,sort,reverse,splice不改变原数组conc...
    Blanca777阅读 1,872评论 0 0
  • 1.concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。 constarray...
    微笑曲线_8eee阅读 3,199评论 0 0
  • 1.join() (数组转字符串) 数组转字符串,方法只接收一个参数:即默认为逗号分隔符()。 vararr=[1...
    GuessYe阅读 1,235评论 0 0
  • 数组的遍历方式 forEach 无法中途退出循环,只能用return退出本次回调,进行下一次回调。它总是返回 un...
    keknei阅读 1,943评论 0 0