zoukankan      html  css  js  c++  java
  • javascript核心基础(数组专题)

    JAVASCRIPT数组专题

    0.注意事项

    javascript的数组的应用是非常广泛的,数组是一种经过优化的类,巧妙地使用数组,可以使程序效率翻倍的提升,学习数组,需要特别注意以下几点:

    1.数组是没有类型的:例如var a = [1,'123',object,{},[],false],这种无下限,无节操的特点,使得创建多维数组,对象数组有了可能。

    2.数组的索引值是从0~232-2的数值,这是数组所能容纳的最大容量,其实如果不是故意找麻烦,数组的长度足够用了。

    3.javascript的数组是动态的,你完全没有必要在声明数组的时候指定其长度,即使指定了也没啥意义,如var array = new Array(10);当其真实数据超过10个时,会动态分配空间

    4javascript数组的索引不一定是连续的,例如稀疏数组(基本上不用考虑,很少使用)

    5.从宏观上来看,数组也是一个对象,其下标值跟一个常规对象的属性是非常类似的,我们经常使用user.name来访问一个类的属性,数组我们使用array[1]来访问,其实使用user[name]访问属性也可以,数组继承自Array.prototype中的属性,其含有很多有用的函数,这些方法同样适用于类数组对象,特别是对于字符串,使用数组的方式,有时会特别简单(后面会专门讨论)

     

    1.数组的创建

    数组的创建有两种方式(1)var array = []; (2)var array = new Array();第一种方式比第二种方式要清晰方便的多,所以建议使用第一种。

    1 var array = [];
    2 var array = [1,3,2,[1,2],object,'abc',true,{}];
    3 var array = [,,,];//由于数字可以设置末尾有可选的“,”此表示两个undefined

    2.数组元素的访问及与常规类的差异

    前面提到数组可以通过new Array()来创建,继承了Array.prototype中的属性,可知数组其实就是一个类,其访问属性的方式都可以是obj[arr]的形式,把数组的下表数字转化为字符‘1’,‘2’...后,完全可以看成就是一个常规类,数组和常规类最大的不同时数组有一个length属性,当我们给一个非负整数赋值(范围内),length属性会自动的更改,如果是范围外的或字符串等,将视为数组的属性,这样我们在访问数组或对象时永远也不会有越界的错误,最多是undefined。

    var  o = [];
    o[1] = 'aaaa';//length为2
    o[1.23] = 'bbbb'//length不变,a有了一个‘1.23’的属性
    o['100'] = 'vvvv';//表示在100这个位置添加了一个 元素,length为101

    3.数组的增删改查

    增删改查是我们程序员的基本功,熟练掌握数组的增删改查是必要的,数组的访问和修改一般按照常规的array[i]的形式进行,此处重点说明增加和删除操作,以及查询的一些小技巧。

    1.增加和删除:

    //添加1
    var a = [];
    a[0]=0,a[1] = 1;//最基础的方式
    //添加2,使用push方法
    a.push('one','two',);//可以多个参数,在数组末尾添加值,并返回新的数组长度
    //删除1
    a.pop();//与push方法相对应的,移除数组末尾的一个值,没有参数,返回移除的元素。这两个方法都是在原数组上进行改动,可以实现数组的栈形式
    a = [1,2,3,4,5,6];
    delete a[1];//表示在1这个位置的数据被删除掉
    1 in a //false 
    //与pop()和push()对用的方法,shift()和unshift()方法
    a = [];
    a.unshift(1);//a:[1]  返回1
    a.unshift(2,3);//a:[2,3,1] 返回3,可以看到多个参数的不同
    a.shift();//a:[3,1] 返回2
    //splice 方法可以完成插入删除或两者兼顾
    var a = [1,2,3,4,5,6,7];
    a.splice(1,2,'a','b')//返回[1,'a','b',4,5,6] 第一个参数表示删除或者插入的起始位置,第二个参数表示要删除的个数,其余的参数都是要此位置插入的数据

     2.数组遍历

    使用for循环是遍历数组最好的方式

    var keys = Object.keys(o);
    var values = [];
    for(var i =0; i < keys.length; i++){
      var key = keys[i];
      values[i] = key;   
    }

    4.数组中常用到的一些方法

    ECMAScript3中常用方法。

    1.join(),将数组的所有元素转化为字符串并联在一起,并返回字符串。

    var a = [1,2,3,4];
    a.join();//返回'1,2,3,4'
    a.join(" ");//返回'1 2 3 4 '
    a.join('-');//'1-2-3-4'

    2.reverse(),数组元素循序变换,返回逆序数组

    var a = [1,2,3];
    a.reverse();
    var s = a.join(-);//s:'3-2-1'

    3.sort(),排序并返回排序后的数组

    //默认按字母顺序排序,undefined排到最后,我们亦可以自定义排序
    var a = [1,22,111,3];
    a.sort(function(a,b){//此处使用匿名函数,没必要起名字
    return a-b;//如果小于0,a在前,大于0,b在前
    });

    4.concat()两个数组的连接,需注意以下细节

    var a = [1,2,3];
    a.concat([4,5]);//返回[1,2,3,4,5]
    a.concat(4,5);//[1,2,3,4,5]
    a.concat(4,[5,[6,7]]);//[1,2,3,4,5,[6,7]]

    5.slice()数组截取。第一个参数表示开始位置,第二个表示结束位置,第二个参数可以省略

    var a = [1,2,3,4,5];
    a.slice(0,3);//[1,2,3]
    a.slice(3);//[4,5]
    a.slice(1,-1);//[2,3,4]
    a.slice(-3,-2)//[3]

    6.splice ()略

    7.push()  pop()略

    8.unshift()  shift()略

    9.toString()//与join()方法类似

    ECMAScript5中的9个方法

    (ECMAScript5大多数方法有两个参数,第一个是一个函数,第二个是可选的)

    1.forEach(),遍历数组。略

    2.map(),相当于生成一个一一对应的新数组

    a = [1,2,3];
    b = a.map(function(v){return v*v});//返回[1,4,9]

    3.filter()通过一定的逻辑找出找的数据

    a=[1,2,3,4,5];
    a.filter(function(x){
        return x < 3;//小于3的x
    });//返回[1,2]
    
    //常用于压缩数组
    var b = a.filter(function(x){return ture});
    
    var c = a.filter(function(x){
        return x!=undefined && x!=null;
    });

    4.every() some()返回true和false ,用法与filter相似 

    5.indexOf()  lastIndexOf()给定一个值,搜素整个数组,找到其下标值,否则返回-1

    6.reduce()   reduceRight() 指定函数对数组元素进行组合,生成单个值。

    var a = [1,2,3,4,5];
    //求和
    var sum = a.reduce(function(x,y){
    return x+y;
    },0);
    //求积
    var pro = a.reduce(function(x,y){
    return x*y
    },1);
    //求最大值
    var max = a.reduce(function(x,y){
    return x>y?x:y;
    });

     可以注意到reduce有两个参数,第一个函数参数是对于数组内各个元素进行组合或化简成一个值,并return,第二个参数是初始化值,如果省略的或,默认使用数组的第一个元素作为初始值。reduceRight()方法与其相同,只不过他是从右向左进行组合化简。这里面的所有函数都是数组最基本的,大家可以通过chrome浏览器的F12开发工具,来进行测试。

  • 相关阅读:
    收藏文章整理
    关于java里的SimpleDateFormat使用
    手写MQ框架(四)-使用netty改造梳理
    JDK8中的ConcurrentHashMap源码
    JDK8中的HashMap源码
    手写MQ框架(三)-客户端实现
    手写MQ框架(二)-服务端实现
    Vue.js入门
    Tomcat启动找不到项目依赖jar的解决方式
    java课堂 动手动脑2
  • 原文地址:https://www.cnblogs.com/wychytu/p/3551027.html
Copyright © 2011-2022 走看看