飞道的博客

JS笔记之快乐的数组

308人阅读  评论(0)


数组(Array)

概念:数组是一组数据的集合,其中每一个数据称为数组元素,js的数组可以放任意数据类型的元素,数组是一种将一组数据元素存储在单个变量名下的优雅方式。

示例解释:

//普通变量名只能存一个数据
var num = 10
//数组存储一组数据
var arr = [1,2,3,4,5,'a','b','c']

一、数组的创建

数组的创建方式:
1、通过new关键字创建(不常用)

//注意A要大写
var 数组名 = new Array()
var arr = new Array()//创建一个空数组
var arr = new Array(5)//创建一个长度为5的空数组

2、通过数组字面量创建(常用)

//1、使用数组字面量创建空数组
var 数组名 = []
//2、使用数组字面量创建带初始值的数组
var 数组名 = [元素1,元素2,元素3···]
如:var arr = [1,3,5,'a','c','e',7,9]//数组元素可以是任意数据类型的

小结:
1.数组是一组数据的集合,是将一组数据存放在同一变量的优雅方式
2.数组的字面量:[ ]
3.声明数组并赋值称为数组的初始化
4.数组中元素可以是任意类型的数据
5.注意:数组元素为字符或字符串要加引号,不加的话解释器会认为是变量从而报错

二、数组元素的访问

1.通过数组索引访问

索引(下标):用来存放数组元素的序号(数组下标从0开始)
        我们可以通过索引来访问、设置、修改相应的元素,注意数组的长度可以不指定,它可以随元素的增加自动扩容,当访问未赋值的元素时,返回undefined获取方式: 数组名[索引号]
下面通过例子来演示一下:

//定义数组
var arr = [1,3,5,'a','b','c']---->//注意字符串要加引号,不然解释器会认为是变量而报错
 console.log(arr)---------------->Array(6)//输出数组长度
 console.log(arr[0])------------->1
 console.log(arr[2])------------->5
 console.log(arr[4])------------->b
 console.log(arr[6])---------- -->undefined//索引下标6没有元素,所以返回undefined
 注意:数组的下标从0开始哟!!!

2.通过循环遍历

请看下面代码:

var arr = ["red","blue","green"]
console.log(arr[0])
console.log(arr[1])
console.log(arr[2])
//输出结果:red blue green

从上面代码观察发现,取出每一个元素只是数组下标改变而已,如果数组元素多的话,一行一行访问速度很慢,为提高效率,我们可以用循环

//1、使用for循环遍历
var arr = ["red","blue","green"]
	for(var i = 0;i<arr.length;i++){
   //length是数组的属性,即为数组长度,没有()
		console.log(arr[i])
	}
//输出结果:red blue green
//2、使用for in循环遍历
var arr = ["red","blue","green"]
	for(var i in arr){
   
		console.log(arr[i])
	}
//输出结果:red blue green

以上访问数组元素的结果是一样的,使用循环可是很便利的
下面做两个小案例来演示下数组的魔力吧!
案例1
使用数组对一组数求和并求平均值,思路:定义2个变量,一个存总和,一个存平均数,通过遍历数组求和,然后除以数组长度求平均数

案例1实现代码
//使用数组对一组数求和并求平均值
var arr = [1,3,5,7,9,2,4,6,8]	//声明一个数组并初始化
var sum = 0;					//创建一个变量来存取各数字之和
var avg = 0;					//创建一个变量来存取平均数
	for(i=0;i<arr.length;i++){
   
		sum += arr[i];			//相当于 sum = sum + arr[i]
	}
	console.log("sum:"+sum)		//打印sum的值,即所有数的和
	avg = sum/arr.length		//求平均值并赋值给avg(arr.lengt是数组的个数)
	console.log("avg:"+avg)		//打印avg的值,即所有数的平均数
//输出结果:sum:45 avg:5(这里仅是演示,没有对结果为多位小数进行处理)

案例2
使用数组对一组数求最大值,图例思路:把数组第一个元素赋值给max,依次遍历比较,如果有元素大于max,则把此元素赋值给max,遍历后比完max即为最大值

案例2实现
//使用数组对一组数求最大值
var arr = [1,3,5,7,9,2,4,6,8]	//声明一个数组并初始化
var max=arr[0];				   //创建一个变量来存取最大值,把arr[0],即1赋值给max
	for(i=01;i<arr.length;i++){
   
		if(arr[i]>max){
   
			max=arr[i]//判断是否有数组元素大于max,有的话就把大于max的值赋值给max
		}
	}
	console.log("max:"+max)		//打印max的值,即数组中最大值
//输出结果:max:9

三、数组的操作

1.数组长度及数组扩容

  1. 使用length属性获取数组长度
// 注意!length是属性,不是函数,所以不用加()
var arr = [1,2,3,4,5];
console.log(arr.length)
//输出结果:5
通常数组的length属性跟数组遍历一起使用,使用循环遍历数组要注意
数组元素最后一位的索引下标是数组长度-1(arr.length-1)
  1. 使用length属性实现数组扩容
// 创建数组,通过length属性扩容数组
var arr = ['a','b','c','d'];
console.log(arr.length)//输出结果为4,数组长度为4
console.log(arr[3])	  //输出数组最后一位元素的值为d
arr.length=6;		 //数组长度扩容为6
console.log(arr)	//输出结果为6,数组长度为6,第四第五个元素的值为empty
console.log(arr[4])	//未赋值,默认为undefined
console.log(arr[5])	//未赋值,默认为undefined

输出结果入图

3. 通过索引号实现数组扩容

// 创建数组,通过索引号扩容数组
var arr = ['a','b','c','d'];
console.log(arr.length)//输出结果为4,数组长度为4
console.log(arr[3])	   //输出数组最后一位元素的值为d
arr[4]='A'			   //给第五个元素进行赋值,因为第5个元素没被占用,所以会在数组后面追加元素
arr[5]='B'			   //给第六个元素进行赋值
arr[10] = 'C'		   //给第11个元素进行赋值
console.log(arr)   
console.log(arr[6])   

运行结果如图,可以发现,JS数组可以直接通过索引号进行扩容,而未赋值的元素默认为empty,返回结果是undefined,如果元素不存在,则在数组后面追加元素,若已经存在,则替换数组元素–>arr[3]

注意:不要直接给数组名赋值,否则会覆盖原有数组!

// 演示
var arr=[1,2,3,4,5]
console.log(arr)//打印原数组
arr="有点意思!"
console.log(arr)


2.数组的常用方法

 1. shift()删除数组中的第一个元素并且返回被删除的元素,
    同时其他元素的索引向前移动一位
var fruits = ['banana', 'orange', 'apple', 'mango']
        console.log(fruits)		//打印原数组
        var x = fruits.shift(); //首元素删除
        console.log(fruits) 	//删除后的数组,数组元素向前索引移动一位
        console.log(x)			//打印被删除元素的值banana

结果如图:

 2. pop()删除数组中的最后一个元素并且返回被删除的元素
var fruits = ['banana', 'orange', 'apple', 'mango']
        console.log(fruits)		//打印原数组
        var x = fruits.pop();   //末尾元素删除
        console.log(fruits) 	//删除后的数组
        console.log(x)			//打印被删除元素的值mango

结果如图:

 3. unshift(参数1,参数2···)向数组的开头添加一个或者更多的元素并且返回新的长度,
    同时数组元素的索引向后移动
var fruits = ['orange', 'apple', 'mango']
        console.log(fruits)		//打印原数组
        var x = fruits.unshift('banana');   //添加后返回数组长度
        console.log(fruits) 	//添加后的数组
        console.log(x)			//打印新数组的总长度

结果如图:

 4. push()向数组末尾增添一个或者多个数组元素,并且返回数组的长度
var fruits = ['orange', 'apple', 'mango']
        console.log(fruits)		//打印原数组
        var x = fruits.push('banana');   //添加一个数后返回数组长度
        console.log(fruits) 	//添加一个元素后的数组
        console.log(x)			//打印添加一个数后新数组的总长度
        var x = fruits.push('pineapple','strawberry');//添加多个元素后返回数组长度
        console.log(fruits) 	//添加多个元素后的数组
        console.log(x)			//添加多个元素后的总长度

结果如图

 5. reverse()翻转数组
   var fruits = ['orange', 'apple', 'mango']
        console.log(fruits);                //打印原数组
        console.log(fruits.reverse())		//打印翻转后的数组

结果如图:

6. sort()数组排序,对字符串排序,比较的是ASCII码的顺序

 1>如["a", "A", "1"], 按ASCII码顺序排列后为["1", "A", "a"](数字>大写字母>小写字母)
 2>如["ab", "ac", "abc"], 排序后为["ab", "abc", "ac"]
 3>字符串数字:如["10", "5", "18" , "50"], 排序后为["10", "18", "5", "50"]
 比较方法:
(第一位相同比较第二位,b>c,因此ab和abc在ac之前;再比较ab与abc, ab没有第三位,因此排在abc之前)!!!

如需要对字符串形式的数字进行排序,可以采用以下两种方式:
	1、统一格式,补足位数,如["10", "5", "18" , "50"]中, 将"5"写为"05"
	2、转换为数字,使用特殊方法对数字排序
 var arr1 = ["a", "A", "1"]
        var arr2 = ["ab", "ac", "abc"]
        var arr3 = ["10", "5", "18", "50"]
        var arr4 = ["10", "05", "18", "50"]
        console.log(arr1.sort());		
        console.log(arr2.sort());			//比较方法:按ASCII码比较排序 
        console.log(arr3.sort());
        console.log("数字排序(5改成'05'):" + arr4.sort());

结果如图:

3.拓展:数字排序

1、匿名函数当做参数使用数组排序(一维数组)

//语法格式:
arr.sort ( function (a, b) {   //arr为需要排序的数组名
    return a - b 			   //升序
})	
根据比较函数返回值正负来决定排列顺序,为正升序,为负降序
使用如下:						  
  function sortby(a, b) {
   
            return a - b //升序
        }				//降序就改成return b-a
        var arr = [10, 5, 8, 50];
        arr.sort(sortby)//把排序匿名函数当做参数进行调用
        console.log(arr);//输出排序后的结果
        //匿名函数的函数名任意
 结果如图:

2、匿名函数当做参数使用数组排序(二维数组)

//语法格式:
arr.sort (function (a, b) {   //arr为需要排序的数组名
    return a[1] - b [1]		 //升序,降序改为b[1]-a[1]
})	
使用如下:						  
  function sortby(a, b) {
   
            return a[1] - b[1] //升序
        }				//降序就改成return b-a
    var arr = [["Alice", "95"], ["Bob", "80"], ["Cart", "100"]]
        arr.sort(sortby)//把排序匿名函数当做参数进行调用
        console.log(arr);//输出排序后的结果
        //匿名函数的函数名任意
 结果如图:

3.拓展:数组筛选(巧用length属性)

将数组[2,4,5,6,8,9,12,15,3,7,26,14]中大于10的元素存入新数组
//分析:
	1、创建一个数组arr=[2,4,5,6,8,9,12,15,3,7,26,14]
	2、创建一个新数组newArr来存放大于10的元素
	3、遍历旧数组,找出大于10的元素
	4、依次添加到新数组中
// 方法1,通过变量来增加数组长度
var arr = [2,4,5,6,8,9,12,15,3,7,26,14]	//创建一个数组
var newArr=[]	//创建空的新数组,用于存放大于10的元素
var j =0 ; 		//定义变量,用于增加新数组的长度
for(var i = 0 ;i<arr.length;i++){
   		//for循环遍历数组
	if(arr[i]>10){
   			//判断数组元素是否大于10
		newArr[j]=arr[i]	//如果arr数组元素>10,则存入新数组
		j++;				//当存入元素,长度+1,即j++
	}
}
console.log(newArr)//打印新数组
// 方法2,巧用length属性
var arr = [2,4,5,6,8,9,12,15,3,7,26,14]	//创建一个数组
var newArr=[]	//创建空的新数组,用于存放大于10的元素
for(var i = 0 ;i<arr.length;i++){
   	//for循环遍历数组
	if(arr[i]>10){
   					//判断数组元素是否大于10
		newArr[newArr.length]=arr[i]//如果arr数组元素>10,则存入新数组
	}		//巧用length属性,数组索引从0开始增加
}
console.log(newArr)//打印新数组

结果如图:

四、二维数组

概念:二维数组就是一维数组的每个元素是一个一维数组

1.二维数组的创建与访问

// 创建与访问
var fruits = [["1", "Banana"], ["2", "Orange"]];//创建二维数组
        var element = ["3", "Apple"];			
        fruits[2] = element;					//给第三个元素赋值
        console.log(fruits);					//打印二维数组
        console.log(fruits[0]); // ["1", "Banana"]//打印第一个元素(数组)
        console.log(fruits[0][1]); // "Banana"   //打印第一个元素的第2个值

结果如图:

2.遍历二维数组

通过for in循环遍历二维数组

var fruits = [["1", "Banana"], ["2", "Orange"], ["3", "Apple"]];
      for (var i in fruits) {
   //控制外层数组元素
          for (var j in fruits[i]) {
   //控制内层数组元素
              console.log(fruits[i][j]);//输出数值中每一个元素
          }
      }

结果如图:

小结:二维数组跟一维数组使用差不多,只是稍微麻烦一点,访问二维数组的具体元素值:arr[外层数组索引][内层数组索引]
遍历二维数组使用双重for循环

3.使用二维数组进行排序(冒泡排序法)

图例解释:

//代码实现如下
var arr = [5,43,2,1];
        for (var i = 0; i < arr.length - 1; i++) {
   //外层循环控制交换趟数,趟数为数组长度-1
            for (var j = 0; j < arr.length - 1 - i; j++) {
   //内层循环控制每一趟需要交换的次数
                if (arr[j] > arr[j + 1]) {
   //判断前面一个数是否大于后面一个数,如果是则交换两数
                    var temp = arr[j];//临时变量,用于交换两数的临时存取
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr);//输出排序后的结果

结果如图:

总结

本次笔记主要记录了数组的基本使用,但是数组的妙用远不止这些,需要我们自己去探索。


转载:https://blog.csdn.net/qq_53738230/article/details/115448785
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场