数组相关方法

123 阅读6分钟

数组是一种特殊的变量,它能够一次存放一个以上的值。数组用于在单一变量中存储多个值。

1.创建数组

  • 数组的每一项可以保存任何类型的数据,数组的大小可以动态调整,随着数据的添加自动增长以容纳新增数据。

  • 文本创建是最简单的方法

    var arr = [1,2,3]//数组字面量由一对包含数组项的方括号表示,多个项之间以逗号隔开 
    var newarr = [] //空数组
    
  • 使用关键字new创建

    var arr = new Array()
    
  •     出于简洁、可读性和执行速度的考虑,请使用第一种方法(文本方法)创建

2.数组的读取和设置

  • 我们通过引用索引号(下标号)来引用某个数组元素

    var arr = cars[0[ //返回cars数组中首个元素的值
    
    cars[0] = 4;      //修改了cars数组中首个元素的值
    
  • 通过javascript 可通过引用数组名来访问完整数组

    console.log(cars)
    
  • 通过数组的属性length获取某个数组元素

    cars[cars.length-1]  //获取数组中最后一个元素的值
    

3.数组的转换方法

  • 数组的toString()方法会返回数组中每个值(逗号分隔)的字符串

    var arr = [1,2,3,4]
    console.log(arr.toString())    //'1,2,3,4'
    
  • 数组的join()方法也可将所有数组元素结合(拼接)成一个字符串,类似toString(),但是还可以规定分隔符

    var arr1 = ['zsan','zsi','lwu'];
    console.log(arr1.join()) //'zsan,zsi,lwu'  不传值默认使用逗号分隔
    console.log(arr1.join('|')) // 'zsan|zsi|lwu'  传值使用分隔符分割
    
  • 如果数组中某项值为null或undefined,那么该值在join(),toString()等方法中返回的结果则是空字符串表示

4. 数组的方法

  • 数组的push()方法可以接受任意数量的参数,将他们逐个添加到数组末尾,并返回修改后的数组长度

    var num = []
    var num1 = num.push(1,2)
    console.log(num)  //添加完的数组   [1,2]
    console.log(num1) //返回的结果 新数组的长度
    
  • 数组的pop()方法从数组最后移除最后一项,减少数组的length值,返回移除的值

    var num = [1,2,3,4]
    var num1 = num.pop()
    console.log(num)  //[1,2,3]
    console.log(num1) // 4
    
  • 数组的unshift()方法可以在数组前端添加任意个值返回新数组的长度

    var num = [1,2,3,4]
    var num1 = num.unshift(5,6)
    console.log(num) // [1,2,3,4,5,6]
    console.log(num1) // 6
    
  • 数组的shift()方法移除数组的第一项并返回移除的值,同时数组长度减一

    var num = [1,2,3,4]
    var num1= num.shift()
    console.log(num) // [2,3,4]
    console.log(num1) // 1
    
  • 数组的reverse()方法会反转数组的顺序,返回反转后的数组

    var num = [1,2,3,4]
    console.log(num) //[4,3,2,1]
    
  • 数组的sort()方法会进行数组排序,返回排序后的新数组

    var arr = ['tom','ani','love','dav']
    arr.sort()   //['ani','dav','love','tom']    //默认按字符串UniCode码的顺序排序
    
    var num = [0,1,5,10,15]
    num.sort()   // [0,1,10,15,5]                //数值排序
    
    var num = [0,1,5,10,15]
    var snum = num.sort(function(a,b){
    return a-b,})
    console.log(snum)   // [0,1,5,10,15]         //升序排序
    
    var num = [0,1,5,10,15]
    var snum = num.sort(function(a,b){
    return b-a;})
    console.log(snum)   //[15,10,5,1,0]          //降序排序
    
    var arr = [     {type:'Volvo',year:2016},     {type:'Saab',year:2001},     {type:'BMW',year:2010}   ];
    arr.sort(function(a,b){return a.year-b.year})  
    // [{type:'Saab',year:2001},{type:'BMW',year:2010},{type:'Volvo',year:2016}]                                       //根据某一项升序排序
    
  • 数组的concat()方法先拷贝一个当前数组,将接收到的参数添加到拷贝的数组末尾,返回新数组

    var num = [1,2,3]
    var num1 = num.concat('red',[4,5])
    console.log(num) //[1,2,3]
    console.log(num1) // [1,2,3,'red',4,5]
    
  • 数组的splice()方法始终返回删除的值,没有删除项则返回空数组

  • 删除:可以删除任意数量的项,指定2个参数,要删除的第一项位置和要删除的个数

    var num = [1,2,3,4]
    var remove= splice(1,2)  //[2,3]  删除的项
    console.log(num)  // [1,4] 
    
  • 插入:可以向指定位置插入任意数量的项,指定三个参数:起始位置,0(要删除的项数),要插入的项

    var num = [1,2,3,4];
    var num1 = num.splice(1,0,5,6) //[]
    console.log(num)  //[1,5,6,2,3,4]
    
  • 替换:可以向指定位置替换任意项,指定三个参数:起始位置,要删除的项数,要插入的项.插入的项不可以和删除的项相同

    var num = [1,2,3,4]
    var num1= num.splice(1,2,5,6,7) //[2,3]
    console.log(num)  // [1,5,6,7,3,4]
    
  • 数组的indexOf()和lastIndexOf()这两个方法都接受两个参数:要查找的项和(可选)查找起点的索引,indexOf()从开头往后找第一次出现的位置,lastIndexOf()从后往前找,没有找到返回-1,找到返回当前项在数组中的索引

    var num = [1,2,3,4,5,4,3,2,1]
    num.indexOf(4);  //3
    num.lastIndexOf(4); //5
    num.indexOf(6);  //-1
    
  • slice截取

  • 数组的slice()方法基于当前数组中的一个或多个项创建一个新数组,该方法接受两个参数,即返回项的起始和结束位置,

  • 只有一个参数的情况下,slice()方法返回从开始位置到数组末尾的所有项,

  • 如果有两个参数,slice()方法返回起始和结束位置之间的项,不包括结束位置的项

  • slice()方法不会影响原数组

  • 如果slice()方法中有负数,则用数组长度加上该负数来确定相应位置

  • 如果结束的位置小于起始位置,则返回空数组

    var num = [1,2,3,4,5]
    var num1 = num.slice(1)  //[2,3,4,5]
    var num2 = num.slice(1,4) //[2,3,4]
    var num3 = num.slice(-4,-1) //[2,3,4]
    var num4 = num.slice(2,1)  // []
    
  • 数组中every()传入的函数必须对每一项返回true,every()才返回true否则返回false

    var num = [1,2,3,4,5,4,3,2,1]
    var num1 = num.every(function(item,index,array){
         return item>2;
    })
    console.log(num1)   //false
    
  • 数组中some()传入的函数只要其中某一项返回true,some()就返回true

    var num = [1,2,3,4,5,4,3,2,1]
    var num1 = num.some(function(item,index,array){
          return item>2;
    })
    console.log(num1)   // true
    
  • 数组中filter()筛选出符合条件的项构建成新数组

    var num = [1,2,3,4,5,4,3,2,1]
    var num1 = num.filter(function(item,index.array){
          return item*2
    })
    console.log(num1)   //[2,4,6,8,10,8,4,2]
    
  • 数组中map()返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

    var num = [1,2,3,4,5,4,3,2,1]
    var num1 = num.map(function(item,index,array){
          return item * 2;
    })
    
  • reduce()和reduceRight() 都会迭代数组所有项,最好返回一个最终值,reduce()从第一项开始遍历,reduceRight() 从最后一项开始遍历,接受4个参数:前一个值,当前值,项的索引,数组对象.第一次迭代发生在数组的第二项上,所以第一个参数是数组第一项,第二个参数是数组的第二项

    var num = [1,2,3,4,5];
    var sum = num.reduce(function(prev,cur,index,array){
          return prev + cur;
    })
    console.log(sum)   //15
    
  • forEach和for循环一样遍历数组  forEach()方法指定数组的每项元素都执行一次传入的函数,返回值为undefined

    var num = [1,2,3,4,5];
    var num1 = num.forEach(function(item,index,array){
         item     //当前正在被处理的元素的值
         index    //当前元素的数组索引
         array    //数组本身
    })    
    
  • 数组中includes()方法基于ECMAScript 2016(es7)规范,它用来判断当前数组是否包含某个指定的值,如果是,则返回true,否则false

    var num = [1,2,3,4,5]
    var num1 = num.includes(2)   //true