• 《JavaScript权威指南》学习笔记 第四天 数组


    昨天学习了js的对象,了解了js的原型链。在js里面万事万物皆对象,只不过一些原始类型要经过包装对象的包装才能暂时变为对象。数组的本质是什么呢?数组其实就是一组数,也就是链表。每个数只是这个链表上的一个位置。js的对象属性值可以是字符串,但是js的数组对象的属性值只能是数字。经常称为索引(index)。在使用的时候可以把数组当成对象来使用。


    1、创建数组的方式

    正如茴香豆的茴有六种写法,我们的js对象也有三种的创建方式。如果你看过昨天的博客就会,了解到创建对象的三种方式。

    • 对象直接量

        <script>
        	var  arr	= ['jack','rose','suse']; 
        <script>
      
    • 使用包装对象

        <script>
        	var arr		= 	new Array('jack','rose','suse');
        </script>
      
    • 使用对象原型创建

        <script>
        	var arr		= 	Array.create()
        </script>
      

    2、稀疏数组与稠密数组

    • 稀疏数组

    稀疏数组就是指数组的索引(index),稀疏数组的索引并不是连续的,而是跳跃的,形如下面的代码。

    	<script>
        	var test = ['name',,'jack','suse'];
        	console.dir(test);
    	</script>
    
    • 稠密数组

      就是数组的索引是连续的,实际上我们平时使用的数组差不多都是稠密数组,在数组的使用上与稀疏数组并没有什么分别。

    3、数组的遍历

    数组的遍历还是使用for循环的比较多一点。我之前还使用过for in循环,不过for in循环用在对象里面更多一点。

    4、数组的方法

    • push
    • unshift
    • pop
    • shift
    • join
    • reverse
    • sort
    • concat
    • slice
    • splice
    • toString
    • map
    • filter
    • every
    • some
    • reduce

    以下为上面数组方法的例子,有兴趣的可以对照着看一下,最好是自己坐下demo,才能记得住。

    <script>
        //push  用来在数组尾部最后一位插入元素
        var arr  =  ['rover','jack','rose','suse'];
        arr.push('javascript');
        console.dir(arr);
        
        //unshift  在数组的头部插入一个元素
        arr.unshift('first');
        console.dir(arr);
        
        //shift 删除数组头部的第一个元素。
        arr.shift();
        console.dir(arr);
        
        //pop  删除数组尾部的最后一个元素
        arr.pop();
        console.dir(arr);
        
        //reverse  返回一个逆序的数组。
        //reverse并不返回一个新的数组,而是直接在原数组上修改。 
        var arrReverse  = [1,2,3,4,5,6];
        arrReverse.reverse();
        console.dir(arrReverse);
        
        //sort  排序函数
        //当sort没有参数的时候,默认是按照英文字母来排序的。
        //如果数组里面是一组数,则需要传入排序的函数。
        var  str  =  ['cup','apple','dog','banana'];
        str.sort();
        console.dir(str);
        var  num  = [45.6,13.99,47.66,32,99,77]; //这里会先把数字转换成字母表顺序。
        num.sort(function(a,b){
        return a-b
        });
        console.dir(num);
        
        //join  把数组切割成字符串,
        var res  =  str.join('|');
        console.dir(res);
        
        //concat  相当于php里面array_merge函数了,拼合两个数组。
        //不能去重,有点麻烦。
        var  arr1  =  ['apple','banana'];
        var  arr2  =  ['cat','dog'];
        res  =   arr1.concat(arr2);
        console.dir(res);
        res.concat(['dog','fly']);
        res.concat(['dog','fly']);
        console.dir(res);
        
        //slice   不包括最后一位。
        var  tmparr =   ['apple','banana','cat','dog'];
        res  =  tmparr.slice(0,1);
        console.dir(res);
        res  =  tmparr.slice(0,2);
        console.dir(res);
        console.dir(tmparr);
        
        //splice
        var  sparr =   ['apple','banana','cat','dog','eyy','fly','guy'];
        msg  =  sparr.splice(1);
        console.dir(msg);
        console.dir(sparr);
        //从以上两个打印的信息来看,splice是会在原来的数组进行处理的,会截取原数组的值。
        //如果只有一个参数,则是从数组的该索引处开始往后截取。
        var  sparr1 =   ['apple','banana','cat','dog','eyy','fly','guy'];
        
        //第一个参数为从索引为1处开始截取,第二个参数为一共截取几个。
        msg  =  sparr1.splice(1,2); //
        console.dir(msg);
        var  sparr2 =   ['apple','banana','cat','dog','eyy','fly','guy'];
        msg  =  sparr2.splice(1,2,'香蕉','猫猫');
        console.dir(msg);
        console.dir(sparr2);  //如果有第三个参数,则后续的参数为插入参数
        
        //map  这个会对数组中的每一个值应用函数。
        var  marr  =  [1,2,3,4];
        msg  = marr.map(function(a){return a+1;});
        console.dir(marr);
        console.dir(msg);
        
        //every  只有数组中所有的元素都满足条件,才返回true
        var  earr  =  [1,2,3,4];
        msg  =   earr.every(
        function(a){
        return a > 3;
        });
        
        console.dir(msg);
        
        //some 只要数组中有元素能满足条件就返回true
        var  somearr  =  [1,2,3,4];
        msg  =  somearr.some(function(a){
        return a > 3;
        });
        
        console.dir(msg);
        
        
        //reduce 使用指定的函数将数组元素折叠
        var  rarr  =  [1,2,3,4];
        msg  = rarr.reduce(function(x,y){
        return x+y;
        });
        
        console.dir(msg);
        
        var  rarr1  =  [1,2,3,4];
        msg  = rarr1.reduce(function(x,y){
        return (x>y)?x:y;
        })
        
        console.dir(msg);
        
    </script>
    

    5、数组判断

    用这个方法还是比较准确的。

    <script>
    	msg1 = Array.isArray([1,2]);
        msg2 = Array.isArray({name:'jack'});
        
        console.dir(msg1);
        console.dir(msg2);
    </script>
  • 相关阅读:
    GoF23种设计模式之行为型模式之中介者模式
    GoF23种设计模式之行为型模式之备忘录模式
    GoF23种设计模式之行为型模式之解释器模式
    GoF23种设计模式之行为型模式之观察者模式
    GoF23种设计模式之行为型模式之状态模式
    GoF23种设计模式之行为型模式之策略模式
    GoF23种设计模式之行为型模式之模板方法
    GoF23种设计模式之行为型模式之访问者模式
    电子地图/卫星地图下载并转存为jpg图片
    webapi swagger学习笔记
  • 原文地址:https://www.cnblogs.com/roverliang/p/5000453.html
Copyright © 2020-2023  润新知