zoukankan      html  css  js  c++  java
  • JS引用类型之——数组

    前言

    数组作为JS中非常常用的引用类型,其功能是非常强大滴,今天小猪就彻底的看了下它。为了防止猪脑子不够用所以记录在案呐

    1、数组的创建

    var arrayObj = new Array(); //创建一个数组
         
    var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
         
    var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); //创建一个数组并赋值


    要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。

    2、数组的元素的访问

    var testGetArrValue=arrayObj[1]; //获取数组的元素值
         
    arrayObj[1]= "这是新值"; //给数组元素赋予新的值


    3、数组元素的添加

    arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
         
    arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
         
    arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。


    4、数组元素的删除

    arrayObj.pop(); //移除最后一个元素并返回该元素值
         
    arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
         
    arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素

    重点来看下splice()方法,这个方法恐怕要算是最强大的数组方法了,它有很多种用法。splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下三种:

    1. 删除:可以删除任意数量的项,只需指定2个参数L要删除的第一项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。

    2. 插入:可以向指定位置插入任意数量的项,只需提供3个参数:其实位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如,splice(2,0,"red","green")会从当前数组的位置2开始插入字符串"red"和"green"。

    3. 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:其实位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和“green”。

    splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组)。

    5、数组的截取和合并

    arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
         
    arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组



    6、数组的拷贝

    arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
         
    arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向


    7、数组元素的排序

    arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
         
    arrayObj.sort(); //对数组元素排序,返回数组地址

    其中比较有意思的是sort方法,在默认情况下,sort()方法按升序排列数组项——即最小值位于最前面,最大值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序,即使数组中的每一项都是数值,sort()方法比较的也是字符串,如下面代码所示

    var values=[0,1,5,10,15];
    values.sort();
    alert(values);     //0,1,10,15,5

    可见,即使例子中值的书序没有问题,但sort()方法也会根据测试字符串的结果改变原来的顺序。因为数值5虽然小于10,但在进行字符串比较式,“10”则位于“5”的前面,于是数组的顺序就被修改了。这特么的怎么办呢?还好sort()方法可以接受一个比较函数作为参数,一边我们制定那个值位于哪个值的前面。

    比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,之后返回正数。以下就是一个简单的比较函数:

    function compare(value1, value2){
        if(value1<value2){
            return -1;
        }else if(value1>value2){
            return 1;
        }else{
            return 0;
        }
    }//这个比较函数可以适用于大多数数据类型,只要将其作为参数传递给sort方法即可,如下
    var values = [0,1,5,10,15];
    values.sort(compare);
    alert(values);   //0,1,5,10,15

    当然,可以利用比较函数来实现降序的结果,只要交换比较函数返回的值即可。

    8、数组元素的字符串化

    arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
         
    toLocaleString 、toString 、valueOf://可以看作是join的特殊用法,不常用

    以下方法在Ie9以下浏览器中不支持。

    9、位置方法
    ECMAScript5为数组实例添加了两个位置方法:indexOf()和lastIndexOf()。这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。

    这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1.在比较第一个参数与数组中的每一项,会使用全等操作符;也就是说,要求查找的项必须严格相等(===)。

    var numbers =[1,2,3,4,5,4,3,2,1];
      
    alert(numbers.indexof(4));       //3
      
    alert(numbers.lastIndexOf(4));   //5
      
    alert(numbers,indexOf(4,4));     //5
    alert(numbers.lastIndexOf(4,4)); //3
      
    var person ={name:"Nicholas"};
    var people = [{name:"Nicholas"}];
      
    var morePeople = [person];
      
    alert(people.indexOf(person));   //-1
    alert(morePeople.indexOf(person));//0

    10、迭代方法

    • every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

    • filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组

    • forEach():对数组中的每一项运行给定函数,这个方法没有返回值。

    • map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

    • some():对数组中的每一项运行给定函数,返回该函数对任一项返回true,则返回true。

    以上方法都不会修改数组中的包含的值。

    var numbers = [1,2,3,4,5,4,3,2,1];
     
    var everyResult = numbers.every(function(item,index,array){
        return (item >2);
    });
    alert(everyResult);//false
     
    var someResult = numbers.some(function(item,index,array){
        return (item >2);
    });
    alert(someResult);//true
     
    var filerResult =numbers.filter(function(item,index,array){
        return (item >2);
    });
    alert(filerResult);//[3,4,5,4,3]
     
    var mapResult=numbers.map(function(item,index,array){
        return item*2;
    });
    alert(mapResult);//[2,4,6,8,10,8,6,4,2]
     
    numbers.forEach(function(item,index,array){
        //执行某些操作
    });

    11、缩小方法

    reduce() reduceRight()方法

  • 相关阅读:
    MongoDB 集合上限说明
    MongoDB mtools-你可能没用过的mongodb神器(转载)
    Redis 你知道 Redis 的字符串是怎么实现的吗?(转载)
    Mongoimport 导数据自动去重
    MongoDB 数据类型
    MongoDB 数据类型整理
    MongoDB mongoimport 时间格式处理
    MongoDB 空值数组查询
    MongoDB WiredTiger 存储引擎cache_pool设计(转载)
    MongoDB运维实战lsm降低Disk Lantency(转载)
  • 原文地址:https://www.cnblogs.com/smallerpig/p/3646165.html
Copyright © 2011-2022 走看看