zoukankan      html  css  js  c++  java
  • js数组的操作push,pop,shift,unshift

    push(args)可以每次压入多个元素,并返回更新后的数组长度。

    var oldArr=[1,2,3]; 
    alert(oldArr.push(4,[5,6]))–>5(这里只会将[5,6]当做一个元素来计算,返回更新后的数组长度5) 
    此时oldArr–>[1,2,3,4,[5,6]] 

    pop()函数每次只会弹出最后一个结尾的元素,并返回弹出的元素,如果是对空组数调用pop()则返回undefined。

    alert(oldArr.pop())–>[5,6](这里弹出最后一个元素[5,6],而不是6) 
    此时oldArr–>[1,2,3,4] 

    unshift和shift 
    这两个方法都是通过对数组的头部进行的操作,其他基本跟push和pop类似,但是在IE中unshift方法返回的是undefined 

    var oldArr2=[1,2]; 
    oldArr2.unshift(3)–>undefined 
    此时oldArr2为–>[3,1,2] 

    oldArr2.shift()–>3 
    此时oldArr2为[1,2] 

    接下来看一下功能强大一点的splice,利用其可以进行数组随意位置的元素添加,删除 ,其操作也是在原有数组上修改 。
    splice(start,deleteCnt,args) 中的start表示开始操作下标,deleteCnt表示从开始下标开始(包括该元素)要删除的元素个数,删除操作返回删除的元素。args表示用来替换删除掉的那些元素(可以有多个参数),start和deleteCnt必须为数字,如果不是数字尝试转换,转换失败当做0来处理。

    splice必须至少有一个start元素,否则不做任何操作。deleteCnt不存在表示删除start及后面的全部元素(IE下,取0不做删除)。start可以为负数,表示从数组右边结尾处开始计算。deleteCnt如果为负数不做删除,因为不可能删除负个元素。 

    var oldArr3=[1,2]; 
    oldArr3.splice()–>”"(返回空的字符串,不做任何操作,操作后oldArr3–>[1,2]) 
    oldArr3.splice(“”)–>[1,2](“”尝试转换为数字失败返回0,所以删除1,2,操作后oldArr3–>[],但是IE下有点恶心,不做任何操作) 
    oldArr3.splice(“1a”)–>同上 
    odlArr3.splice(0,2)–>[1,2](“从下标0的元素开始,删除两个元素1,2因此删除后oldArr3–>[]) 
    oldArr3.splice(0,-1)–>”"(从0下标开始删除-1个元素,故等于没做任何操作,操作后oldArr3–>[1,2]) 
    oldArr3.splice(1,1)–>2(从下标1 开始删除1个元素,即删除2,所以删除后oldArr3–>[1]) 
    oldArr3.splice(1,4)–>2(从下标1 开始删除4个元素,1开始只有1个元素,故删除2,所以删除后oldArr3–>[1]) 
    oldArr3.splice(-1,0,3)–>”"(从下标-1即2元素开始删除0个元素,然后添加元素3,所以操作后oldArr3–>[1,3,2]) 
    oldArr3.splice(-1,1,3)–>2(从小标-1即2元素开始删除1个元素,然后添加元素3,操作后为oldArr3–>[1,3]) 

    接下来开始讲concat,这个方法用来连接两个或多个数组,该数组不会改变原来的数组只会返回新的一个数组。连接的时候参数如果为数组,则连接的是数组中的元素。

    var oldArr4=[1,2]; 
    oldArr4.concat(3,4)–>[1,2,3,4] 
    oldArr4.concat(3,4,[5,6])–>[1,2,3,4,5,6](这边添加的是[5,6]中的元素5和元素6) 
    oldArr4.concat(3,[4,[5,6]])–>[1,2,3,4,[5,6]](这边最里层的元素[5,6]整个用来添加,而不是拆开) 

    数组中的排序方法

    sort(function)是针对原数组进行的排序,不会生成新的数组。默认sort()不带参数时按照数组中的元素转换成字符串进行比较。

    var oldArr5=[3,1,5,7,17] 看这个一般观念上以为对oldArr5排序时oldArr5.sort()会按照数字从小到大排序即返回[1,3,5,7,17],但是看一下结果其实不然返回的是[1,17,3,5,7] 因为比较的时候都被转成字符串。然后对字符串进行一个个的比较如果第一个字符相同则比较第二个,否则直接返回比较结果,因为”17″<”3″所以可想而知排序的结果就不是一般印象中的那个结果了。

    sort(function)方法除了默认的无参外还可以传入自定义的排序方法,这样排序的结果完全可以由自己来控制了,想怎么排就怎么排,是不是很爽啊,呵呵。 一般自定义的function比较函数,包含两个参数分别代表用来比较的左元素和右元素。然后通过一定方式返回一个结果,如果返回值大于0表示交换左右元素,如果返回值小于0或等于0则表示不不会交换左右元素。现在来看一下例子 

    按照数字从大到小排列原有数组 :

    var oldArr5=[3,1,5,7,17]; //初始数组 
    function mySort(left,right){ 
    if(left<right){ 
      return 1;}//如果左边元素小于右边元素则交换两数 
    else{ 
      return -1;}//如果左边元素大于等于右边元素不做交换 

    当然上面的方法可以简化为

    funaction mySort(left,right){ return right-left;} 

    //按照偶数在前奇数在后排序 

    var oldArr6=[3,6,7,18];//初始数组 
    function mySort2(left,right){ 
      if(left%2==0)return -1;//如果左边元素为偶数则不交换 
      if(right%2==0)return 1; //如果右边元素为偶数则交换 
      return 0; //不交换 

    最后的slice不多讲,只是用来截取原数组中的部分元素,返回一个新的数组,原数组不会改变,其操作方式跟string的slice类似 

    var oldArr7=[1,2,3,4]; 
    oldArr7.slice(0)–>[1,2,3,4] 
    oldArr7.slice(0,2)–>[1,2] 
    oldArr7.slice(0,0)–>[] 
    oldArr7.slice(0,-1)–>[1,2,3] 
    oldArr7.slice(-3,-1)–>[2,3] 
    oldArr4.slice(-1,-3)–[] 

  • 相关阅读:
    kicad 基本操作
    RedHat centos中的上传下推脚本
    使用Node.js爬虫存储MySQL数据库
    解决vue和vue-template-compiler版本不同报错的问题
    Vue组件通信(父子组件通信)-学习笔记
    git 简单操作
    错误解决:redis.exceptions.ResponseError: unknown command 'SENTINEL'
    nginx做泛域名解析的域名的正则判断
    postman对字符串进行base64编码方法和变量的使用
    pymysql报错OperationalError: (2013, 'Lost connection to MySQL server during query')
  • 原文地址:https://www.cnblogs.com/hubl/p/5804166.html
Copyright © 2011-2022 走看看