JavaScript 数组

一、 简介

​ 数组就是用来存储一组数据的

  • 声明一个变量就是在内存空间划出一块合适的空间
  • 声明一个数组就是在内存空间划出一串连续的空间

​ 数组的三要素:

  • 数组名称:用于区分不同的数组
  • 数组元素:向数组中存放的数据
  • 元素下标:数组元素的编号,也称为索引,从0开始,通过下标来访问数组元素

二、基本用法

​ 1、步骤:

1.创建数组

var 数组名=new Array();

2.为数组元素赋值

数组名[索引]=元素值;

3.获取元素值

数组名[索引]

        //1.定义数组
        var array=new Array();//其实数组也是一个变量,只不过可以存储多个数据
        //2.向数组中添加元素
        array[0]="tom";
        array[1]="jack";
        array[2]="lily";
        array[3]=12;
        array[4]=true;//可以添加任意类型的数据
        //3.获取数组元素
        console.log(array[0]);
        console.log(array[3]);
        console.log(array[4]);
        console.log(array[5]);//获取不存在的元素时返会undefined
        //直接输出数组
        console.log(array);//所有元素以逗号分隔,包围为中括号里

 

2、数组属性

length属性,用法:数组名.length

数组的 ​length属性返回它的元素的个数。也可修改数组长度

        var array=new Array();
        array[0]="tom";
        array[1]="jack";
        array[2]="lily";
        array[3]=12;
        array[4]=true;
        console.log(array);
        console.log(array.length);
        array[5]="180.5";
        console.log(array.length);//当数组中元素数量发生变化时,length属性的值也会变化
        //修改数组的长度,即只保留指定数量的元素
        array.length=2;
        console.log(array);

因为数组索引是从0开始的,所以 length 属性总是比最高的数组索引大1。如果数组为空则length属性的值为0

三、循环数组 

        var array=new Array();
        array[0]="tom";
        array[1]="jack";
        array[2]="lily";
        array[3]=12;
        array[4]=true;
        console.log(array);
        //循环数组,三种方式
        for(var i=0;i<array.length;i++){
            console.log(i,array[i]);
        }
        for(var index in array){
            console.log(index,array[index]);
        }
        for(var item of array){
            console.log(item);
        }

 

四、定义数组的方式

​ 两种方式:

  • 使用new Array()
var array=new Array();  // 创建一个空数组,长度为0
var array=new Array(4); // 创建一个长度为4的数组(只填一个数字)
var array=new Array("apple", "orange", "peach", "bananer"); // 创建一个包含初始元素的数组
array[0]="grape"//修改元素的值
array[array.length]=88;//向数组的末尾添加元素
  • 使用数组字面量[]
var names=[ ]; // 创建一个空数组
var names= ["apple", "orange", "peach", "bananer"]; // 创建一个包含初始元素的数组
names[0]="grape"//修改元素的值
names[names.length]=88;//向数组的末尾添加元素

五、字符串索引数组

​ 默认情况下,会使用数字作为数组索引,也可以使用字符串作为数组索引,称为字符串索引数组

  • 字符串索引一般称为key键,对应的元素称为value值
  • key不会对length属性产生影响,所以不适合使用普通for循环,而应该使用for…in或for...of循环
        var arr=[21,66,88,99];
        arr[4]=77;
        arr["name"]="jack";
        arr["sex"]="female";
        arr["age"]=23;
        console.log(arr);
        console.log(arr["age"]);
        console.log(arr["sex"]);
        console.log(arr.length);//length属性无法获取字符串索引的元素
        //for...in遍历数组中所有元素
        for(var i in arr ){
            console.log(i,arr[i]);
        }

 

六、数组常用方法

方法名含义
reverse()将数组元素倒序排列
indexOf()返回指定元素在数组中第一次出现的位置
lastIndexOf()返回指定元素在数组中最后一次出现的位置
join()将数组拼接为string
concat()将多个数组拼接成一个数组
push()向数组末尾添加一个或多个元素,并返回新的长度
pop()删除并返回数组的最后一个元素
unshift()向数组开头添加一个或多个元素,并返回新的长度
shift()删除并返回数组的第一个元素
slice()返回数组中指定范围内的元素
splice()删除元素,并在删除位置添加新的元素,然后返回被删除的元素
toString()将数组转换为字符串
valueOf()返回数组对象本身,一般会自动调用
sort()排序,默认按字符编码的顺序排列,非string类型会自动转换为string,也可以自定义比较规则
forEach()遍历数组中的每个元素

示例: 

       //用法:数组名.方法名(参数)
        var names1=["tom","jack","alice","mike","jack","lucy"];
        console.log(names1);
        //1.reverse()反转
        names1.reverse();
        console.log(names1);
        //2.indexOf()查询指定元素第一次出现的位置
        var names2=["tom","jack","alice","mike","jack","lucy"];
        console.log(names2.indexOf("jack"));//如果重复只显示第一次出现的位置
        console.log(names2.indexOf("jack",2));//从索引为2的位置开始查找
        console.log(names2.indexOf("apple"));//如果不存在,则返回-1
        //3.lastIndexOf()查询指定元素最后一次出现的位置
        var names3=["tom","jack","alice","mike","jack","lucy"];
        console.log(names3.lastIndexOf("jack"));
        //4.join()拼接为字符串
        var names4=["tom","jack","alice","mike","jack","lucy"];
        console.log(names4.join());//默认使用,逗号拼接
        console.log(names4.join("-"));//指定要分隔的字符
        //5.concat()将多个数组拼接成一个数组
        var names5=["tom","jack","alice","mike","jack","lucy"];
        var hobbies=["eat","sleep"];
        names5=names5.concat(hobbies);
        console.log(names5);
        //6.push()向数组末尾添加新的元素,并返回新的长度
        var names6=["tom","jack","alice","mike","jack","lucy"];
        names6.push("yang");//等价于names6[names6.length]="yang"
        console.log(names6);
        //7.pop()删除并返回数组末尾的元素
        var names7=["tom","jack","alice","mike","jack","lucy"];
        console.log(names7.pop());
        //8.unshift()向数组开头添加新的元素,返回新的数组长度
        var names8=["tom","jack","alice","mike","jack","lucy"];
        names8.unshift("aa","bb");
        console.log(names8);
        //9.shift删除并返回数组开头的元素
        var names9=["tom","jack","alice","mike","jack","lucy"];
        console.log(names9.shift());
        //10.slice()获取指定索引范围内的元素
        var names10=["tom","jack","alice","mike","jack","lucy"];
        console.log(names10.slice(2,4));//获取索引为[2,4)之间的元素,左闭右开
        console.log(names10.slice(2));//如果省略第二个参数,表示获取到数组末尾
        //11.splice()从指定索引位置删除指定个数的元素,并在此位置添加新的元素
        var names11=["tom","jack","alice","mike","jack","lucy"];
        // names11.splice(2,3);//从索引为2的位置开始删除,删除3个
        console.log(names11.splice(2,3));//返回被删除的元素
        names11.splice(2,3,"aa","bb");//在删除的位置添加元素
        console.log(names11);
        //12.toString()将数组转化为字符串
        var names12=["tom","jack","alice","mike","jack","lucy"];
        var str=names12.toString();//等价于names12.join()
        console.log(str);
        //13.valueOf()
        var names13=["tom","jack","alice","mike","jack","lucy"];
        console.log(names13.valueOf());
        console.log(names13);//自动调用valueOf()
        //14.sort()排序,默认按字符编码ASCII的顺序排列
        var names14=["tom","jack","alice","mike","jack","lucy"];
        names14.sort();
        console.log(names14);
        var nums=[12,24,21,65,3,27,77];
        nums.sort();//默认会将数字转换为字符串,然后根据字符编码进行排序
        console.log(nums);
        //15.forEach()遍历数组
        var names15=["tom","jack","alice","mike","jack","lucy"];
        names15.forEach(function(value,index){//value表示数组元素,index表示元素索引
            console.log(value,index);
        });      

 执行结果:

七、二维数组

​ 二维数组可以认为是特殊的一维数组:

  • 一维数组中的每个元素又是一个一维数组
  • 即数组中的元素也是数组

示例:

        //二维数组
        var names=[
            ["aa","bb","cc"],
            ["11","22","33","44"],
            ["a1","a2"]
        ];
        console.log(names[1][2]);
        //使用二重循环遍历输出
        for(var i=0;i<names.length;i++){
            for(var j=0;j<names[i].length;j++){
                document.write(names[i][j]+"&nbsp;&nbsp;&nbsp;&nbsp;");
            }
            document.write("<br>");
        }
        //循环生成二维数组
        var array=[];
        //循环生成四行
        for(var i=0;i<4;i++){
            array[i]=[];
            //循环生成四列,并为每列生成一个随机数
            for(var j=0;j<4;j++){
                array[i][j]=parseInt(Math.random()*99+1);
            }
        }
        console.log(array);

 执行结果:

八、冒泡排序

​ 冒泡排序是一种比较简单的排序算法

  • 比较相邻的元素,如果第一个比第二个大,交换它们两个(升序)
  • 比较相邻的元素,如果第一个比第二个小,交换它们两个(降序)
  • 针对所有元素重复以上的步骤,直到没有任何一对数字需要比较

​ 结论:

  • 如果有n个元素,则需要比较n-1轮
  • 每一轮比较n-m次,m表示第几轮

 

        var nums=[12,4,25,7,49,23,150,2];
        console.log(nums);
        //外层循环控制比较的轮数,每一轮确定一个数字
        for(var i=0;i<nums.length-1;i++){//比较n-1轮(n在这儿为nums.length)
            //内层循环控制每轮比较的次数
       for(var j=0;j<nums.length-i+1;j++){//比较n-m次,m表示第几轮(m在这儿为i+1,因为i从0开始)
                //升序
                if(nums[j]>nums[j+1]){
                    var temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
            }
            console.log("第"+(i+1)+"轮:"+nums);
        }
        console.log(nums);

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值