数组以及常见api

day06

一:数组的概念:

数组用来存储一组数据。类似于数学概念中的集合。

是一个引用类型的数据,存储时,有两块空间,一块存地址,一块存数据

二:数组的定义

2·1:构造方法

new 在内存中开辟空间

2.1.1:无参的构造函数
var a1=new Array();
//返回的是一个空的数组
2.1.2:一个参数的构造函数
var a2=new Array(5);
//创建指定长度的数组(由于数组长度可以动态调整,作用并不大)
2.1.3:带有初始化数据的构造函数
//返回的是new出来空间的地址
var arr = new Array(1,2,3);
//创建数组并初始化参数数据

2·2:字面量

2·2·1:创建空数组(等同于调用无参构造函数)
var a4=[];
2·2·3:初始化数据(等同于调用带有初始化数据的构造函数)
var a5=[10];
//只有一个元素为10

【注意:】引用类型的存储方式,以及索引的思维

三:数组的元素访问

语法:数组名[下标];

数组的下标又叫数组的索引值,一般通过索引来访问数组中任意元素。

  • 下标是基于零开始的 ,千万不要越界访问
  • 下标是一个连续的整数,下标最大取值是“长度-1”
  • 下标可以是一个变量或者是一个表达式
var arr = [6,5,7,4,8];
	 var n = 2;
	 console.log(arr[n]);

四:数组的遍历

4·1.遍历:

操作数组时,每个元素都要操作一遍,这个时候我们会用循环来访问每一个元素,循环访问数组的每一个元素的过程就叫做数组的遍历。

【注意】:数组的长度:arr1.length

4·2.循环遍历的方式:

方式一:for循环遍历
//
var arr=[1,2,1,3,4,5];
for(var i=0; i<arr.length; i++){
		console.log(arr[i]);
	}
方式二:for…in…遍历 【遍历数组的下标】

该遍历方法主要用于JSON对象

var arr=[1,2,1,3,5,4];
for(var index in arr){
		console.log(arr[index]);//打印0,1,2,3,4,5
	 }

[注意]:如果对没有的下标,进行赋值,则等价于添加新元素

var arr=[1,2,1,3,5,4];
//如果对没有的下标,进行赋值,则等价于添加新元素
 arr["heihei"] = 999;
 for(var index in arr){
	console.log(arr[index]);//打印1,2,1,3,4,5,999
     console.log(index)//打印0,1,2,3,4,5,下标
 }
方式三:for…of…遍历【遍历数组的内容】
var arr=[1,2,1,3,4,5];
for(var item of arr){
	 	console.log(item);//打印1,2,1,3,4,5
	 }

五:数组的API

5·1:API的学习方法

  • 函数的功能
  • 函数的参数
  • 函数的返回值
  • 参考文档

5·2数组常见API

  • 尾插(一个或多个)—> push(参数1 ,[参数2…参数N]) —>返回数组的新长度

    var arr = [1,2,3];
    var len = arr.push(999,888,777);//1,2,3 ,999 ,888, 777,
    
  • 尾删 —> pop()—>删除最后一个元素并返回被删除的元素

    var arr = [1,2,3];
    var x = arr.pop();//1,2
    
  • 头插(一个或多个)—> unshift(参数1 , [参数2…参数N] ) —>返回数组的新长度

    var arr = [1,2,3];
    arr.unshift(111);//111,1,2,3
    
  • 头删 —> shift()—>删除第一个元素并返回被删除的元素

    var arr = [1,2,3];
    arr.shift();
    console.log(arr);//2,3
    
  • 删除或添加若干个元素—> splice(参数1,参数2,[参数3]) —>返回一个由删除元素组成的新数组

    参数1:开始索引

    参数2:删除元素的位移

    参数3:插入的新元素,当然也可以写多个(可省略)

    var arr = [6,5,7,4,9,3];
    var arr1 = arr.splice(1,3,9,8,7,6);
    	console.log(arr);//打印6,5,7,4,9,3
    	console.log(arr1);//6,9,8,7,6,9,3
    
  • 数组转字符串 —>join([分隔符号])—>返回值为转换后的字符串

    	 var arr = [6,5,7,4,8];
    	 var str = arr.join("*");
    	
    	 console.log(typeof str);//string
    	 console.log(str);//6*5*7*4*8
    
  • 截取子数组—> slice(起始位置下标,结束为止) —>返回截取的子数组 左闭右开

     	 var arr = [1,2,3,4,5];
    	 var arr1 = arr.slice(2,4);
    	 console.log(arr);//1,2,3,4,5
    	 console.log(arr1);//3,4
    
  • 拼接数组—> concat(数组) —> 返回一个新数组(不修改原数组的内容)

    	 var arr1 = [1,2,3];
    	 var arr2 = [6,7,8];
    	 var arr3 = arr1.concat(arr2);
    	 console.log(arr3);//1,2,3,6,7,8
    
  • 将数组逆序 —> reverse( ) —> 无返回值,直接改变原数组

    	 var arr = [6,5,7,8,4,9];
    	 arr.reverse();
    	 console.log(arr);//9,4,8,7,6,5
    
  • 排序 —> sort( ) —> 返回排序(小-大)后的数组,且原数组发生改变

    var arr = [11,6,5,7,8,4,9];
    	arr.sort();
    	console.log(arr);//打印11,4,5,6,7,8,9
    

六:二维数组

二维数组的本质就相当于一维数组的嵌套循环

var a = [[1,2,3],[4,5,6],[7,8,9]];
    for(var i=0; i<a.length; i++){
        for(var j=0; j<a[i].length; j++){
            document.write(a[i][j] + " ");
        }
        document.write("</br>");
    }

七:数组的排序

7·1:冒泡排序

:N-1:N-1-i
冒泡:
    var a = [6,5,4,7,3,8,2,9,1,0];
    var t;
    for(var i=0; i<a.length-1; i++){
        for(var j=0; j<a.length-i-1; j++){
            if(a[j]>a[j+1]){
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }

   for(var i=0;i<a.length; i++){
       console.log(a[i]);
   }

7·2:选择排序

 var a = [6,5,4,7,3,8,2,9,1,0];
    var t;
    //记录目标位置
    var k;
    for(var i=0; i<a.length-1; i++){
        k = i;
        for(var j=i+1; j<a.length; j++){
            if(a[k]>a[j]){
                k = j;
            }
        }
        t = a[i];
        a[i] = a[k];
        a[k] = t;
    }

ar t;
//记录目标位置
var k;
for(var i=0; i<a.length-1; i++){
k = i;
for(var j=i+1; j<a.length; j++){
if(a[k]>a[j]){
k = j;
}
}
t = a[i];
a[i] = a[k];
a[k] = t;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值