第三章 数组

目录

 

(一)初识数组

(二)创建数组

1.使用Array对象创建数组

 2.使用“[]”创建数组

(三)数组的基本操作

1.获取数组长度

 2.数组的访问与遍历——访问数组元素

3.数组的访问与遍历——遍历数组元素

4.数组的访问与遍历——遍历数组

 5.元素的添加与修改

6.元素的添加与修改——添加元素

 7.元素的添加与修改——修改元素

 8.元素的删除

(四)常见数组方法

 1.栈和队列方法

2.检索方法

 4.检索方法——indexOf()方法

 2.检索方法——lastIndexOf()方法

 3.数组转字符串

4.其他方法 

 练习:


(一)初识数组

思考:如何保存一个班级的所有学生的相关信息,如姓名、学号、年龄?

回答:一种方法利用前面学习过的知识,则每一条信息都需要一个变量去保存,缺点是这样做很麻烦,而且容易出错,又不合理;另一种方法就是利用数组。

概念:数组是存储一系列值的变量集合

数组构成:数组由一个或多个数组元素组成的,各元素之间使用逗号“,”分割。

数组元素:每个数组元素由“下标”和“值”构成

下标:又称索引,以数字表示,默认从0开始依次递增,用于识别元素。

:元素的内容,可以是任意类型的数据,如数值型、字符型、数组、对象等。

数组还可以根据维数划分为一维数组、二维数组、三维数组等多维数组。

一维数组:就是指数组的“值”是非数组类型的数据,如上图。

二维数组:是指数组元素的“值”是一个一维数组,如下图。

多维数组:当一个数组的值又是一个数组时,就可以形成多维数组。它通常用于描述一些信息。

解决开始提出的问题:保存一个班级学生信息,每个数组元素都代表一个学生,而每个学生都使用一个一维数组分别表示其姓名、学号、年龄等信息,这样通过一个变量即可有规律的保存一个班级的所有学生信息,方便开发时进行处理。


(二)创建数组

数组在JavaScript中的创建方式

实例化Array对象的方式。

直接使用“[]”的方式。

1.使用Array对象创建数组

实例化Array对象的方式创建数组,是通过new关键字实现的。

// 元素值类型为字符串
var area = new Array('Beijing', 'Shanghai', 'Shenzhen');
// 元素值类型为数值型
var score = new Array(56, 68, 98, 44);
// 元素值类型为混合型
var mix = new Array(123, 'abc', null, true, undefined);
// 空数组
var arr1 = new Array();   或    var arr2 = new Array;

 2.使用“[]”创建数组

直接法“[]”与Array()对象的使用方式类似,只需将new Array()替换为[]即可。

var weather = ['wind', 'fine',]; // 相当于:new Array('wind', 'fine',)
var empty = [];                    	     // 相当于:new Array
// 控制台输出mood:(5) ["sad", empty × 3, "happy"]
var mood = ['sad', , , ,'happy'];   

 在创建数组时,最后一个元素后的逗号可以存在,也可以省略。

直接法“ [] ”与 Array() 对象在创建数组时的区别在于,前者可以创建含有空存储位置的数组,而后者不可以。

(三)数组的基本操作

1.获取数组长度

Array对象提供的length属性可以获取数组的长度,其值为数组元素最大下标加1

var arr1 = [78, 88, 98];
var arr2 = ['a', , , , 'b', 'c'];
console.log(arr1.length); // 输出结果为:3
console.log(arr2.length); // 输出结果为:6

这里不是逗号作为数据哦,而是空格 

数组的length属性不仅可以用于获取数组长度,还可以修改数组长度

在利用length属性指定数组长度时,有以下是三种情况:

 1.length的值大于数组中原来的元素个数,则没有值的数组元素会占用空存储位置

var arr1 = [];
arr1.length = 5;
console.log(arr1);      // 输出结果:(5) [empty × 5]
var arr2 = [1, 2, 3];
arr2.length = 4; 
console.log(arr2);      // 输出结果:(4) [1, 2, 3, empty]

2. length的值等于数组中原来的元素个数,数组长度不变。

var arr3 = ['a', 'b'];
arr3.length = 2; 
console.log(arr3);      // 输出结果:(2) ["a", "b"]

 length的值小于数组中原来的元素个数,多余的数组元素将会被舍弃

var arr4 = ['hehe', 'xixi', 'gugu', 'jiujiu'];
arr4.length = 3; 
console.log(arr4);      // 输出结果:(3) ["hehe", "xixi", "gugu"]

 除此之外,在利用Array对象方式创建数组时,也可以指定数组的长度。

var arr = new Array(3);
console.log(arr);      // 输出结果:(3) [empty × 3]

JavaScript中不论何种方式指定数组长度后,并不影响继续为数组添加元素,同时数组的length属性值会发生相应的改变。(3);

 2.数组的访问与遍历——访问数组元素

数组元素访问方式:“数组名[下标]”。

接下来,通过一个例子来演示如何访问数组元素,具体参考教材例3-1

3.数组的访问与遍历——遍历数组元素

概念:所谓遍历数组就是依次访问数组中所有元素的操作。

利用下标遍历数组可以使用:for(已学)。

利用下标遍历数组可以使用:for…in语句。

4.数组的访问与遍历——遍历数组

for…in 中的 variable 指的是数组下标。
for…in 中的 object 表示数组的变量名称。

除此之外,若object是一个对象,for…in还可以用于对象的遍历

 ES6中,新增了一种for…of语法,可以更方便地对数组进行遍历。

变量value表示每次遍历时对应的数组元素的值

变量arr表示待遍历的数组

结果: 在控制台中依次输出 1 2 3

 5.元素的添加与修改

元素的添加与修改元素的方式:“数组名[下标]”。

提示:与访问数组中的元素的方式相同。

6.元素的添加与修改——添加元素

添加数组元素:数组名 [ 下标 ] = 值。
允许下标不按照数字顺序连续添加,未设置具体值的元素,会以空存储位置的形式存在。
数组中元素保存顺序与下标有关,与添加元素的顺序无关。

 

 7.元素的添加与修改——修改元素

 修改元素与添加元素的使用相同,区别在于修改元素是为已含有值的元素重新赋值

 8.元素的删除

在创建数组后,有时也需要根据实际情况,删除数组中的某个元素值。

例如,一个保存全班学生信息的多维数组,若这个班级中有一个学生转学了,那么在这个保存学生信息的数组中就需要删除此学生。

此时,可以利用delete关键字删除该数组元素的值。

delete关键字只能删除数组中指定下标的元素值,删除后该元素依然会占用一个空的存储位置。

 多学一招:解构赋值

除了前面学习过的变量声明与赋值方式,ES6中还提供了另外一种方式——解构赋值。例如,若把数组[1,2,3]中的元素分别赋值为abc,传统的做法是单独为变量声明和赋值。

当左侧变量的数量小于右侧的元素的个数,则忽略多余的元素

当左侧变量数量大于右侧的元素个数时,则多余的变量会被初始化为undefined

 解构赋值时右侧的内容还可以是一个变量。

通过解构赋值完成两个变量数值的交换。

(四)常见数组方法

 1.栈和队列方法

JavaScript中,除了前面讲解的添加与删除数组元素的方式外,还可以利用Array对象提供的方法,模拟栈和队列的操作

在数组的末尾或开头添加数组的新元素。

在数组的末尾或开头删除数组元素。

方法名称

功能描述

push()

将一个或多个元素添加到数组的末尾,并返回数组的新长度。

unshift()

将一个或多个元素添加到数组的开头,并返回数组的新长度。

pop()

从数组的末尾移出并返回一个元素,若是空数组则返回undefined

shift()

从数组的开头移出并返回一个元素,若是空数组则返回undefined

push() unshift() 方法的返回值是新数组的长度
pop() shift() 方法返回的是移出的数组元素

2.检索方法

在开发中,若要检测给定的值是否是数组,或是查找指定的元素在数组中的位置。

方法名称

功能描述

includes()

用于确定数组中是否含有某个元素,含有返回true,否则返回false

Array.isArray()

用于确定传递的值是否是一个 Array,是返回true,不是返回false

indexOf()

返回在数组中可以找到给定值的第一个索引,如果不存在,则返回-1

lastIndexOf()

返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1

表中除了 Array.isArray () 方法外,其余方法默认都是从指定数组索引的位置开始检索,且检索方式与运算符“ === ”相同,即只有全等时才会返回比较成功的结果

3.检索方法——includes()Array.isArray()方法

var data = ['peach', 'pear', 26, '26', 'grape'];
// 从数组下标为3的位置开始检索数字26
console.log(data.includes(26, 3));       // 输出结果:false
// 从数组下标为data.length - 3 的位置查找数字26
console.log(data.includes(26, -3));       // 输出结果:true
// 判断变量data是否为数组
console.log(Array.isArray(data));           // 输出结果:true

includes() 方法的第 1 个参数表示待查找的值。
includes() 方法的第 2 个参数用于指定在数组中查找的下标。
设置为大于数组长度时,数组不会被检索,直接返回 false
设置为小于 0 的数时,则检索的索引位置等于数组长度加上指定的负数,若结果仍是小于 0 的数,则检索整个数组。

 4.检索方法——indexOf()方法

indexOf()用于在数组中从指定下标位置,检索到的第一个给定值,存在则返回对应的元素下标,否则返回-1

下面以判断一个元素是否在指定数组中,若不在则更新数组为例进行讲解

indexOf()方法的第2个参数用于指定开始查找的下标:

当其值大于或等于数组长度时,直接返回 -1
当其值为负数时,则查找的下标位置等于数组长度加上指定的负数,若结果仍是小于 0 的数,则检索整个数组。
var str="Hello world, welcome to the universe.";
var n=str.indexOf("e",5);//在字符串第五个位置开始查找字符 "e" 第一次出现的位置:结果为14

var str="Hello world, welcome to the universe.";
var n=str.indexOf("e");//在字符串查找字符 "e" 第一次出现的位置:1

 5.检索方法——lastIndexOf()方法

Array对象提供的lastIndexOf()方法,用于在数组中从指定下标位置检索到的最后一个给定值的下标。与indexOf()检索方式不同的是,lastIndexOf()方法默认逆向检索,即从数组的末尾向数组的开头检索。

接下来以找出指定元素出现的所有位置为例进行讲解。

lastIndexOf()方法的第2个参数用于指定查找的下标,且由于其采用逆向的方式检索:

当其值大于或等于数组长度时,则整个数组都会被查找。
当其值为负数时,则索引位置等于数组长度加上给定的负数,若其值仍为负数,则直接返回 -1

//查找字符串 "runoob" 最后出现的位置:

var str="I am from runoob,welcome to runoob site.";
var n=str.lastIndexOf("runoob");n 输出结果:28

//从第 20 个字符开始查找字符串 "runoob" 最后出现的位置,:

var str="I am from runoob,welcome to runoob site.";
var n=str.lastIndexOf("runoob", 20);//n 输出结果:10

 6.数组转字符串

开发中若需要将数组转换为字符串时,则可以利用JavaScript提供的方法实现。

方法名称

功能描述

join()

将数组的所有元素连接到一个字符串中。

toString()

返回一个字符串,表示指定的数组及其元素。

var arr = ['a','b','c'];
console.log(arr.join());    		// 输出结果:a,b,c
console.log(arr.join('-')); 		// 输出结果:a-b-c
console.log(arr.toString());		// 输出结果:a,b,c

join()toString()方法的相同点:

可将多维数组转为字符串,默认情况下使用逗号连接。
当数组元素为 undefined null 或空数组时,对应的元素会被转换为空字符串

join()toString()方法的不同点:join()方法可以指定连接数组元素的符号。

7.其他方法 

方法名称

功能描述

sort()

对数组的元素进行排序,并返回数组。

fill()

用一个固定值填充数组中指定下标范围内的全部元素

reverse()

颠倒数组中元素的位置

splice()

对一个数组在指定下标范围内删除或添加元素

slice()

从一个数组的指定下标范围内拷贝数组元素到一个新数组中

concat()

返回一个合并两个或多个数组后的新数组

slice()和concat()方法在执行后返回一个新的数组,不会对原数组产生影响,剩余的方法在执行后皆会原数组产生影响。
splice() 方法的第 1 个参数的值等于或大于数组长度时,从数组末尾开始操作;当该值为负数时,则下标位置等于数组长度加上指定的负数,若其值仍为负数,则从数组的开头开始操作

//数组排序:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
//fruits 输出结果:

//Apple,Banana,Mango,Orange

//数字排序(数字和升序):

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
//fruits输出结果:

//1,5,10,25,40,100

//数字排序(数字和降序):

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a});
//fruits输出结果:

//100,40,25,10,5,1

//填充 "Runoob" 到数组的最后两个元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.fill("Runoob", 2, 4);
输出结果:
//
//Banana,Orange,Runoob,Runoob


var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
//fruits 结果输出:

//Mango,Apple,Orange,Banana



//数组中添加新元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,0,"Lemon","Kiwi");
//fruits 输出结果:

//Banana,Orange,Lemon,Kiwi,Apple,Mango



//实例
//移除数组的第三个元素,并在数组第三个位置添加新元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi");
//fruits 输出结果:

//Banana,Orange,Lemon,Kiwi,Mango



//实例
//从第三个位置开始删除数组后的两个元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,2);
//fruits 输出结果:

//Banana,Orange


var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);
//citrus 结果输出:

//Orange,Lemon


//实例
//连接两个字符串:

var str1 = "Hello ";
var str2 = "world!";
var n = str1.concat(str2);
//n 输出结果:

//Hello world!

 

 

 练习:

猴子选大王

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pig Pig Cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值