• JS数组


    一、什么是数组

    内存中连续多个数据的数据结构,再起一个统一的名字。

    数组也是一个对象,和我们普通的对象功能类似,也是用来储存一些值的。不同的是普通对象是使用字符串作为属性名的,而数组使用数字作为索引操作元素。

    数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据。

    使用 typeof 检查数组的数据类型时就会返回 object 对象类型。

    为什么要使用数组:

    普通的变量只能存储一个数据程序(数据程序 = 数据结构 + 算法

    算法:解决问题的步骤

    数据结构:数据在内存中的存储结构,好的数据结构可以极大的提高程序的执行效率

    什么时候使用数组:

    只要存储多个连续的数据就使用数组

    二、创建数组

    (一)创建空数组:2种

    1、数组字面量:

    语法: var arr = [ ];

    var arr = [ ];    //意味着创建一个不包含元素的数组

    var arr = [12,13,14];  //意味着创建一个包含三个元素的数组

    2、使用构造函数:

    语法:var arr = new Array();

    var arr = new Array();  //定义一个不包含元素的数组

    var arr = new Array('Aa','Bb','Cc');  //定义一个三个字符串元素的数组

    在创建数组时,还不知道数组里面的元素内容时。

    (二)创建数组的同时初始化

    1、数组字面量:var arr = [元素1,元素2…];

    2、用 new Array方法:var arr = new Array(元素1,元素2,…)

    在创建数组时,如果已经知道了数组里面的元素内容,就可以使用创建数组并同时进行初始化这种方式。

    var array = [111,222,333];

    var array = new Array(111,222,333);

    (三)先声明空数组,再添加元素

    直接量

    var arr = [ ];
    arr[0] = 'aaa';
    arr[1] = 'bbb';

    new Array方法

    var arr = new Array();
    arr[0]  = '安安';
    arr[1] = 111;
    arr[3] = true;

    上面这种既有字符串又有数字,还有布尔值的数组,称之为混合类型的数组

    三、访问数组中的元素

     元素:数组中的每个数据都是元素

    如何访问:下标,数组中唯一标识每个元素储存位置的序号。

    索引:从0开始的整数就是索引;索引(index)一个索引对应一个值,这一个整体称之为元素。

    特点:从0 开始,连续不重复

    何时:如果想访问数组元素只能,使用下标

    语法:数组名[ i ] (用法和单个变量完全一样)

    数组GET操作和SET操作

    (一)设置数组元素的值——SET

    1、向数组中添加元素

    语法:数组[索引] = 值;

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    arr[3] = 44;
    console.log(arr);

    注意:10在索引为0的位置,33在索引为1的位置,索引都是从0开始的

     2、向数组中修改添加元素

     var ss = [98,22,100];
     ss[2] = 60;  //将值为100的元素重新赋值为60;
    ss[3] = 75;  //在元素的尾部添加一个新的元素;

    注意:索引从0 开始,最大到 length-1;

    (二)获取数组元素的值——GET

    语法: 数组[索引]

    1、读取数组中的元素

    注意:如果读取不存在的索引,他不会报错而是返回 undefined

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    console.log(arr[2]);
    console.log(arr[4]);

    (三)数组的 length 属性:

    (获取数组的元素个数)

    记录了数组中理论上的元素的个数,length 的值永远都是最大下标 +1

    语法数组.length

     length 设置或是获取数组的长度 (检查有几个元素,元素个数)

    1、对连续的数组使用length,可以获得数组中元素的个数(连续的数组——缩印按照顺序排列0、1、2、3、…)

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    arr[3] = 44;
    console.log(arr.length);

    2、对非连续的数组,length的数组长度为最大索引+1(假设最大索引是98,那么数组.length的结果就是99)

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    arr[3] = 44;
    arr[10]= 99;
    console.log(arr.length);
    console.log(arr);

    (修改length)

    1、如果修改的 length 大于数组原来长度,则多出的部分会空出来

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    arr[3] = 44;
    arr.length = 10;
    console.log(arr.length);
    console.log(arr);

    2、如果修改的 length 小于原长度,则多出的元素会被删除(可以通过length来删除元素)

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    arr[3] = 44;
    arr.length = 2;
    console.log(arr.length);
    console.log(arr);

    (向数组最后一个位置添加元素)

    语法: 数组[数组.length] = 值;

    注意: 如果 [ ] 里不加数组名,那么就是到全局中去找length(假设数组的最大索引为3,就要往4加。如果想往数组再添加顺序索引内容,就要比最大索引 + 1)。

    var  arr = new  Array();
    arr[0] = 10;
    arr[1] = 33;
    arr[2] = 22;
    arr[3] = 44;
    arr[arr.length] = 77;
    arr[arr.length] = 88;
    arr[arr.length] = 99;
    console.log(arr.length);
    console.log(arr);

    四、数组遍历

    遍历数组的元素,通常选用 for 循环语句,元素的检索(下标)作为循环变量

    元素索引从0开始,到 length-1 结束

    var arr = [12,13,14,15,16]
    for(var i = 0;i<arr.length;i++){
        arr[i] += 10;
    }
    console.log(arr);

     length总结:

    获得数组的最后一个元素arr[arr.length - 1]

    获得倒数第n个元素的位置arr[arr.length - n]

    数组缩容:减小  arr.length 的数值,会删除结尾的多余元素

    遍历数组:依次访问数组中的每个元素,对每个元素执行相同的操作

    for(var i = 0;i<arr.length;i++){
        arr[i]  //当前正在遍历的元素
    }

    五、数组类型

    (一)索引数组:下标为数字的数组

    数组特殊的特点:三个不限制

    1、不限制数组元素的个数:长度可变

    2、不限制下标越界

    获取元素:不报错!返回undefined

    修改元素值:不报错!自动在指定位置创建新元素,并自动修改length属性值为最大索引 +1;

    修改length属性为最大索引 +1;

    如果索引不连续的数组——稀疏数组

    3、不限制元素的数据类型

    (二)关联数组:可以自定义下标名称的数组

    为什么使用关联数组

    索引数组中的下标没有明确的意义;

    hash数组可以实现元素的快速增删,查找,

    什么时候使用关联数组

    只有希望每个元素都有专门的名称的时候,就使用关联数组;

    1、关联数组的创建方式

    如何创建关联数组(两步)

    第一步:创建空数组

    第二步:向空数组中添加新元素,并且自定义下标名称。

    var name = [ ];
    name['xiaoming'] = '小明';
    name['hanhan'] = '憨憨';

    2、关联数组的遍历

    由于关联数组的 length 属性值无法获取其中元素的数量,所以遍历关联数组只能使用for … in循环

    for( var key in hash){
           key //只是元素的下标名
           aa[key] //当前元素值
    }

     (三)索引数组和关联数组的对比

    索引数组:

    1、以字符串输出

    2、索引是数字

    3、length属性有效

    4、访问元素,都用数组名['索引']

    5、可以 for 循环遍历

    关联数组:

    1、不能使用字符串输出

    2、下标是自定义的字符串

    3、length属性失效(=0)

    4、不能用 for 循环遍历,需要使用 for … in循环

     索引数组和关联数组的查找

     总结:如果只要希望快速查找元素的时候,就使用hash数组

    六、数组的空位

    当数组的某个位置为空元素(即两个逗号之间没有任何值),则称这个数组存在空位(hole)

    数组的空位不会影响length的值;

    var arr = [1,2,3,,4];
    console.log(arr.length);

    注意:如果最后一个元素后面有逗号,并不会产生空位,即有没有这个逗号,结果都是一样的。

    下面例子中,数组的最后一个成员后面有一个逗号,这并不影响length属性的值,与没有逗号的时候是一样滴。

    var arr = [1,2,3,];
    console.log(arr.length);

    数组的空位是可以读取的,结果返回undefined

    使用 delete 命令删除一个数组成员,会形成空位,并且不会影响 length 属性。

    使用delete 命令删除了数组第二个元素,这个位置就形成了空位,但是产生空位之后对length属性是没有影响的。

    也就是说,length属性是不过滤空位的。所以如果想使用length属性进行数组遍历,要小心可能会出现空位现象。

    数组的某个位置的空位,与某个位置是undefined,是两种不同的情况。如果是空位,使用数组的forEach方法、for…in结构、Object.keys方法进行遍历,空位都会被跳过。

    var a = [, , ,];
    a.forEach(function (x, i) {
     console.log(i + '. ' + x);
    })

    没有任何输出


    for (var i in a) {
     console.log(i);
    }
    // 不产生任何输出
    Object.keys(a)
    // []

     

     当某个位置是undefined的时候,遍历的时候就不会被跳过;

    var a = [undefined, undefined, undefined];
    a.forEach(function (x, i) {
     console.log(i + '. ' + x);
    });
    // 0. undefined
    // 1. undefined
    // 2. undefined
    for (var i in a) {
     console.log(i);
    }
    // 0
    // 1
    // 2
    Object.keys(a)
    // ['0', '1', '2']

     空位就相当于数组中没有这个元素,所以不会被遍历到;

    undefined则表示数组中有这个元素,只是值是undefined,所以遍历不会跳过;


    实例一:

    求取数组的和平均值

    实现步骤:

    先声明 一个求和变量 sum;

    遍历这个数组。把里面每个数组元素加到 sum里面;

    用求和变量 sum 除以数组的长度就可以得到数组的平均值;(想要输出多个变量,使用逗号分隔即可)

    var arr=[2,6,1,7,4];
    var sum = 0;
    var average = 0;
    for(var i =0;i< arr.length;i++){
        sum += arr[i];
    }
    average = sum / arr.length;
    console.log(sum,average);

     实例二:

    求取数组中的最大值

    实现步骤:

    声明一个保存最大元素的变量 max;

    默认最大值也可以取数组中的第一个元素。

    遍历这个数组,并把里面的每个数组元素和 max相比较。

    如果这个数组元素大于 max的值,那么就将这个数组元素存到 max里面,否则继续进行下一轮比较;

    最后输出最大值 max;

    (如何去理解呢,可以理解为擂台赛,一个人在擂台守擂(守擂的人就相当是最大值),其他人与他较量,如果赢了,就代替原来的人守擂,就是最厉害的(最大值))

    var arr=[2,5,9,34,1,89,50];
    var max=arr[0];
    for(var i=1;i<arr.length;i++){
        if(arr[i] > max){
            max=arr[i];
        }
    }console.log(max);

     还可以用三元运算符代替 if 语句:

    补充:三元运算符

    语法:表达式1?表达式2:表达式3

    表达式1是条件,值为 Boolean类型;

    若表达式 1的值为 true,则执行表达式 2 的操作,并且以表达式 2的结果为整个表达式的结果;

    若表达式 1的值为 false,则执行表达式 3 的操作,并且以表达式 3的结果为整个表达式的结果;

    下面的三元运算语句含义为:

    如果 arr[i]<max (数组中的元素小于max)为 真true,则变量max的值还是原来的不变;

    如果 arr[i]<max (数组中的元素小于max)为 假false,则变量max的值变成 arr[i]的结果;

    var arr=[2,5,9,34,1,89,50];
    var max=arr[0];
    for(var i=1;i<arr.length;i++){
        max = arr[i] < max?max:arr[i];
    }console.log(max);

    实例三:

    求取数组中的最小值,和求取数组中的最大值思路一致。只需要换个符号就可以了。

    var arr=[2,5,9,34,1,89,50];
    var min=arr[0];
    for(var i=1;i<arr.length;i++){
        if(arr[i]<min){
            min=arr[i];
        }
    }console.log(min);

     或者是使用三元运算符,返回结果也是一样的。

    var arr=[2,5,9,34,1,89,50];
    var min=arr[0];
    for(var i=1;i<arr.length;i++){
        min = arr[i] < min?arr[i]:min;
    }console.log(min);

    实例四:

    数组转换成字符串,并使用符号分隔

    实现步骤:

    需要一个新的变量用于存放转换完之后的字符串 str

    遍历原来的数组,分别把里面的数据取出来,加到字符串里。

    同时在后面多加一个分隔符号;

    var arr=["yi","er","san","si","wu"];
    var str='';
    var sep='/';
    for(var i=0;i< arr.length;i++){
        str += arr[i]+sep;
    }
    console.log(str,typeof(str));

  • 相关阅读:
    Nginx+PHP-FPM优化技巧总结
    基于php-fpm的配置详解
    Nginx中修改php.ini的上传设置upload_max_filesize的值
    nginx调用php-fpm出错解决方法和nginx配置详解
    LNMP笔记:php-fpm – 启动参数及重要配置详解
    nginx php-fpm安装手记
    C#使用Log4Net记录日志
    .NET中使用Redis (二)
    .NET中使用Redis
    SQL自定义函数split分隔字符串
  • 原文地址:https://www.cnblogs.com/nyw1983/p/11788891.html
Copyright © 2020-2023  润新知