zoukankan      html  css  js  c++  java
  • js学习总结----数组

    Object->{}、[]、/^$/、时间

      每一个对象都是由属性名和属性值组成的

      var ary = [12,23,34,45]

      数组也是对象,我们看到的是它的属性值,属性名是数字0~3。0存储的是第一项的值 1存储的是第二项的值...我们把代表第几项的这个数字的属性名叫做数组的索引

      length:4 数组的长度  数组中有一个length的属性 ,这个是浏览器天生就给数组增加的(不是我们自己编写的属性),这个属性属于当前数组不可枚举的属性。

      for in循环是用来遍历一个对象中属性名和属性值的,但是对于当前对象不可枚举的属性,我们通过他是遍历不到的,例如:我们无法遍历到ary.length这个属性

      数组常用的方法(15个) 

      学习数组中常用的方法,我们需要按照四个维度去探讨

        1)、方法的作用

        2)、需要传哪些参数

        3)、是否有返回值,返回值是什么

        4)、通过此方法是否对原来的数组产生了改变

      1、关于数组的增加、修改、删除

        1)、push:向数组的末尾增加新的内容

          参数:想向末尾增加哪些内容就传递谁,而且可以传递多个值,用逗号隔开,统一向末尾增加多项

          返回:新增加后数组的长度

          原来的数组已经发生了改变

          扩展:不想使用push,也想向数组的末尾增加内容。

            ary[ary.length] = 10

        2)、pop:删除数组最后一项内容

          参数:没有

          返回:被删除的那一项内容

          原有数组发生改变

          扩展:不用pop想删除最后一项的内容

          ary.length--;

        3)、shift:删除数组中的第一项

          参数:没有

          返回:被删除的那一项

          数组发生改变

        4)、unshift:向数组开头增加一项   

          参数:增加内容

          返回:数组长度

          数组发生改变

        5)、splice:它既能实现删除,也能实现增加,还能实现修改

          [删除]

          ary.splice(n,m) 从索引n开始删除m个元素,把删除的内容以一个新数组的方式返回,原来的数组改变

          ary.splice(n) 从索引n开始,删除到数组的末尾

          ary.splice(0) 把原来的数组中的每一项都删除掉(清空数组每一项),把之前的每一项的值以一个新的数组返回(把之前的数组克隆了一份一模一样的,只不过这样的克隆会修改原来的数组)

          ary.splice() 数组中的一项都没有删除,返回的是一个空数组

          [修改]

          ary[2] = 340 //利用对象的操作的方式修改某一项的值,

          splice(n,m,x) 从索引n开始,删除m个,用x替换删除的部分,把删除的内容以一个新的数组返回,原来的数组改变

          [增加]

          splice(n,0,x)从索引n开始,一个都不删除(返回结果是一个空数组),把x增加到索引n的前面,原来的数组改变

       2、关于数组的截取和拼接

          1)、slice:实现数据的截取,在原来的数组中截取某一部分

            slice(n,m)  从索引n开始,找到索引为m,将找到的部分以一个新的数组返回,原来的数组不变

            slice(n) 从索引n开始 一直找到数据末尾

            slice(0) /slice() 把原来的数组克隆一份一模一样的新数组返回

            思考:

              分析一下slice这几种特殊的情况:n或者m为负数、n>m、n或者m已经超过了整个数组的范围

          2)、concat:把两个数组拼接到一起,原来的数组不变

            ary1.concat(ary2) 把ary1和ary2进行拼接,ary2在后面

            ary1.concat()把ary1克隆一份一模一样的数组

          3)、把数组转化成字符串

            toString():把数组转化成字符串,原来的数组不变

            join():按照每一个分隔符,把数组中的每一项拼接成一个字符串,原来的数组不变。

            扩展:eval->js中把字符串变为js表达式执行的一个方法

            console.log(eval("12+23+34+45"))//114

            将数组中的每一项进行相加求和

            console.log(eval(ary.join("+")));

        4、数组的排序和排列

          1)、reverse:把数组倒过来排序

          2)、sort:给数组进行排序  原来的数组改变

            ary.sort()  这样的话只能处理10以内的数字进行排序,因为它是按照UNICODE编码的值进行排序的。

            ary.sort(function(a,b){return a-b}); 由小到大排序

            ary.sort(function(a,b){return b-a});   由大到小排序

        5、只有在标准浏览器中兼容的方法,在ie6-8不兼容的

          1)、indexOf / lastIndexOf (字符串中也有这两个方法,但是字符串的这两个方法兼容所有的浏览器,而数组的这两个方法是不兼容的) :返回元素的索引,原来的数组不变。如果返回的结果为-1,证明在数组中不存在。    

          2)、forEach / map 都是用来遍历 数组中的每一项的

            forEach:数组中有几项,我们的函数就执行几次;函数中的形参 item 为当前遍历的值  index 为当前的索引  原来数组不变

              ary.forEach(function(item,index){})

            map和forEach的语法是一样的,但是比forEach多加了一个把原来内容进行替换的功能

              ary.map(function(item,index){

                return item*10;

              })

              返回的新数组是每一项都乘以10

        更多的数组方法:

          console.log(Array.prototype) 

        数组去重: (web.jobbole.com/83425)

          利用对象的键值对方法:

            1)、我们把数组中的每一项的值当做一个对象的属性名和属性值存起来

            2)、但是在每一次存储之前,我们判断当前这一项(N)是否在对象中已经存在了。

              如果obj[N]=N 说明已经存在了  ,说明已经存在,那么在数组中把这一项删除

              如果是undefined 说明还没有这一项,说明当前这一项还没有重复,我们把其当做对象的属性名和属性值存储进去即可。

          var ary = [1,2,3,2,12,1,2,3,4,56,12,23]

          var obj = {1:1,2:2,3:3}

          obj[1] = 1;

          obj[2] = 2;

          obj[3] = 3;

          在我要存储第四项的时候,我判断一下对象中是否包含了2这一项。

          obj[2] //2

          obj[4]//undefined

          具体代码如下:     

    var ary = [1,2,3,2,12,1,2,3,4,56,12,23];
    
    var obj = {};
    
    for(var i = 0;i<ary.length;i++){
        var cur = ary[i];
        if(obj[cur]==cur) {//说明对象中已经存在cur这一项了 也说明数组已经重复    
            //ary.splice(i,1); //元素内容较多时,后面的每一项的索引都修改了 影响性能
         // 我把数组末尾的那一项拿过来替换当前项,再把数组末尾的那一项删除掉
         ary[i] = ary[ary.length-1];
         ary.length--;//把数组末尾的那一项的值删除掉
    i
    --;// 解决数组 删除元素数组塌陷问题 continue; } obj[cur] = cur }

            

          

          

        

        

      

      

      

      

  • 相关阅读:
    es5
    总有你用的上插件
    三级联动
    jquery快速入门
    动态创建数据table
    背景裁切
    移动web-bootstrap
    ionic开发之Android可以很快打开主页,iOS要几分钟打开主页
    .Net语言 APP开发平台——Smobiler学习日志:如何在手机上快速实现CandleStickChart控件
    .Net语言 APP开发平台——Smobiler学习日志:如何快速实现Timer计时功能
  • 原文地址:https://www.cnblogs.com/diasa-fly/p/7065402.html
Copyright © 2011-2022 走看看