zoukankan      html  css  js  c++  java
  • 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

        Array(数组)是JavaScript中较为复杂的数据类型,同Java、C#、VB等程序语言的数组相比。Javascript数组中的元素不必为同样的数据类型,能够在数组每一个元素上混合使用数字、日期、字符串、Object,甚至加入一个嵌套数组。


    一、创建数组

        1、var arr1 = new Array(); /var  arr2 = new Array(length); /var arr3 = new Array(element1,element2...);

     var arr4 = [element1,element2,...];    length是一个指定数组长度的整数。

    element是一系列随意值。


        2、变长数组:JavaScript的数组长度能够随意扩展。

    var arr = new Array(2);
    arr[0] = "Jan";
    arr[1] = "Feb";
    arr[2] = "Mar";
    alert(arr.length);   //输出3

       3、元素能够为空

    var arr = new Array();
    arr[0] = "Jan";
    arr[2] = "Mar";
    alert(arr.length);   //输出3
    alert(arr[1]);   //undefined
    可是document.write(arr);将输出:Jan,,Mar


       4、使用Array()时的注意事项:不能将另外一个数组作为參数传递给该函数,否则是创建了一个仅有一个元素的复合数组

    var arr1 = ['a','b','c'];
    var arr2 = new Array(arr1);
    document.write(arr2+"<br/>");
    document.write(arr2[0]+"<br/>");
    document.write(arr2[1]+"<br/>");
    document.write(arr2[0] === arr1);

    结果:


    可是使用Object()则不然,它创建了一个对象的副本。

    var obj = {a:1,b:2,c:3};
    var obj2 = new Object(obj);
    document.write(obj2+"<br/>");
    document.write(obj2.a+"<br/>");
    document.write(obj === obj2);

    结果:


    二、实现和使用多维数组

        在Javascript中不能够直接声明多维数组。可是能够将数组嵌套实现多维数组。

    var multiArr = new Array(new Array("one","two"),new Array(1,2));
    document.write(multiArr+"<br/>");
    document.write(multiArr[0]+"<br/>");
    document.write(multiArr[1][0]+"<br/>");
    document.write("循环输出数组元素:<br/>");
    
    for(var i = 0; i < multiArr.length; i++)
    {
    	for(var j = 0; j < multiArr[i].length;j++)
    	{
    		document.write(multiArr[i][j]+"<br/>");
    	}
    }

    结果:


    三、使用Array API处理数组

        1、Array类的常见方法和属性:


        2、Array类的静态属性:

    CASEINSENSITIVE :在排序中。此常数指定不区分大写和小写。

    DESCENDING:在排序中。此常数指定降序排序。

    NUMERIC:在排序中,此常数指定数字(不是字符串)排序。

    RETURNINDEXEDARRAY:指定排序返回索引

    UNIQUESORT:在排序方法中,此常数指定唯一的排序要求。


       3、演示样例

    var arr = new Array("Jody");
    document.write("原数组:"+arr+"<br/>");
    arr.push("Mary");      //新增一个元素
    document.write("新增一个元素:"+arr.toString()+"<br/>");
    
    arr.push("Marcell");
    document.write(arr.toString()+"<br/>");
    arr.shift();   //删除第一个元素
    document.write("删除第一个元素:"+arr.toString()+"<br/>");
    
    arr.reverse();  //反转元素
    document.write("反转元素:"+arr.toString()+"<br/>");
    
    var arr1 = ["Judy","Jody"];
    var arr3 = arr1.concat(arr);  //两个数组相连创建一个新数组
    document.write("两个数组相连创建一个新数组:"+arr3.toString()+"<br/>");
    document.write("join()方法:"+arr3.join("-")+"<br/>");
    
    var arr4 = arr3.slice(0,2);
    document.write("slice()方法返回子数组:"+arr4.join("-")+"<br/>");
    document.write("splice()方法删除元素:"+arr3.splice(0,2)+"<br/>");

    结果:


    四:ECMAScript 5 新增的方法(在IE中。仅仅有IE9支持)

        1、every(callbackFunction[,thisObject]):对数组的每一项运行測试函数,直到获得对指定的函数返回false的项。

    callbackFunction为定义的函数名,该函数有元素值、元素索引和Array对象三个參数;thisObject可选,是函数的this对象。

        2、filter(callbackFunction[,thisObject]):对数组的每一项运行測试函数。依据函数结果构造一个新数组。全部数组元素对指定函数返回TRUE,则新数组中包括此元素。反之。不包括。

        3、forEach(callbackFunction[,thisObject]):对数组中的每一项运行回调函数。參数同every()函数。

      

       4、indexOf(seachElement[,fromIndex]):使用“===”运算符搜索数组中的项。并返回该值索引位置。

    seachElement是查找项,若没有找到则返回-1。fromIndex是查找的起始位置。

       5、Array.isArray(objArr):静态方法,推断指定的參数是否为数组。

       6、lastIndexOf(seachElement[,fromIndex]):使用“===”运算符搜索数组中的项(从最后一项向前搜索),并返回该值索引位置。语法同indexOf()方法。



         7、map(callbackFunction[,thisObject]):对数组的每一项运行測试函数,依据函数结果构造一个新数组,当中包括与原始数组中的每一项的函数结果相应的项。參数语义同every()函数。

        8、reduce(callbackFunction[,initialValue]):从左到右,使用函数比較数组中的两个值,将两个值删除一个。callbackFunction是自己定义的函数,包括前一个元素值、当前元素值、当前元素索引和Array对象。initialValue是第一次调用callbackFunction函数时的previous值(前一个元素值)。若不定义,第一次调用callbackFunction时前一个元素值是第一个元素值,当前值是第二个元素值;若定义了,则当前值是第一个元素值。

        9、refuceRight(callbackFunction[,initialValue]):从右到左,使用函数比較数组中的两个值,将两个值删除一个。參数语义同reduce()。

        10、some(callbackFunction[,thisObject]):对数组中的每一项运行測试函数,直到返回true的项。


    五、数组的排序:

         sort([sortfunction]):用于对数组进行排序。sortfunction可选,用来定义数组元素排序的函数,若省略。元素依照ASCII字符顺序进行升序排列,意味着不能对中文排序。

        1、默认的排序规则

            1.1   排序区分大写和小写,大写优先于小写(Z优先于a)

            1.2    按升序排序(a优先于b)

            1.3    数字字段按字符串形式排序。所以100优先于99,由于1的字符串值比9低。

     

       2、自己定义排序:定义sortfunction參数

            2.1  函数返回 -1表示传递的第一个參数比第二个參数小

            2.2   函数返回 0表示传递的第一个參数等于第二个參数

            2.3   函数返回 1表示传递的第一个參数比第二个參数大

    var arr = new Array("Tom","Tommy","John");
    //依照ASCII顺序升序排列
    arr.sort();
    document.write("依照ASCII顺序升序排列:"+arr+"<br/>");
    
    var sortFun = function(a,b)
    {
    	if(a.length < b.length) return -1;
    	if(a.length > b.length) return 1;
    	if(a.length == b.length) return 0;
    }
    
    arr.sort(sortFun);
    document.write("依照自己定义顺序排列:"+arr+"<br/>");

    结果:



    六、创建和使用复合数组:在Javascript中能够使用Object和Array对象创建复合数组


        1、使用Object对象创建

              var per = {sex:"male",age:28,birth:new Date(1980,7,5)};

              document.write(per.sex) <=> document.write(per['sex']) ;//类似于创建Javascript对象

        2、使用Array对象创建

              var per = new Array();

              per['sex'] = "male";   per['age'] = 28;  per['birth'] = new Date(1980,7,5);

             下面方法则是错误的:

             var per = [sex:"male",age:28,birth:new Date(1980,7,5)];

          

         3、遍历复合数组

    var per = new Array();
    per['sex'] = "male";   
    per['age'] = 28;  
    per['birth'] = new Date(1980,7,5);
    
    for(var i in per)
    {
    	document.write(i+" : "+per[i]+"<br/>");
    }

    结果:



  • 相关阅读:
    pip或easy_install安装库报错:SSL: CERTIFICATE_VERIFY_FAILED
    js 闭包
    php 安装xdebug进行调试(phpstorm)
    Linux下一个最简单的不依赖第三库的的C程序(2)
    Linux下一个最简单的不依赖第三库的的C程序(1)
    windbg .net 程序的死锁检测 常用方法(个人备份笔记)
    自定义经纬度索引(非RTree、Morton Code[z order curve]、Geohash的方式)
    通过经纬度坐标计算距离的方法(经纬度距离计算)
    根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)
    The version of SOS does not match the version of CLR you are debugging; SOS.dll版本不匹配; Dump文件不同环境mscordacwks.dll版本问题
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5105909.html
Copyright © 2011-2022 走看看