首页 > 编程笔记 > JavaScript笔记
阅读:11
JavaScript数组的创建和操作方法(非常详细)
JavaScript 中的数组与其他语言的数组大相径庭,以 Java 语言为例,Java 中的数组只能存储相同类型的数据,而 JavaScript 中的数组可以存储任意类型的数据。
数组是一系列有序数据的集合,数组中的每个数据都称作元素。元素可以是 JS 支持的任意类型。数组示例代码如下:
数组也是对象,可以使用 typeof 和 instanceof 进行检测:
但是数组是一种特别的对象,它拥有自己的特性。数组中每个元素都有一个下标(也被称作索引),从 0 开始依次递增。每定义一个数组,在该数组中都会有一个默认属性为 length,它代表着数组中元素的个数,也被称作数组的长度,示例代码如下:
以数组字面量的方式创建数组是直接使用中括号来包裹数据,中括号内以逗号间隔元素,而且数组字面量创建方式是使用频率较高的。示例代码如下:
运行代码后,查看控制台,结果为:
另一种使用 Array 构造函数创建数组,它是创建数组的本质。其实字面量创建数组的方式的底层原理就是使用该方法进行创建的,示例代码如下:
需要特别注意的是,使用构造函数创建数组可以省略 new 关键字,与使用 new 的方式结果相同,示例代码如下:
运行代码后,查看控制台,结果为:
我们可以通过索引读取数组中对应位置的元素,同样也可以通过索引添加新元素,示例代码如下:
[ 1, 2, 3, 1000, 1000 ]
另外,添加元素还可以借助 push() 方法和 unshift() 方法。
push() 方法用于实现在数组末尾添加一个或多个元素,其返回值为添加元素后的新数组的长度,语法格式如下:
示例代码如下:
unshift() 方法可以向数组第一位新增一个或多个元素,语法格式如下:
使用 for 循环语句来遍历数组,是利用数组的 length 属性来控制 for 循环的执行次数,示例代码如下:
for...in 循环是一种特殊类型的循环,它是普通 for 循环的变体,其语法格式如下:
请思考这个问题,将数组 [1, 3, 5] 每个元素值都增加 10,如何实现?
此时可以通过循环语句的方式对数组中每个元素进行遍历,再进行更新操作,如下代码所示:
对数组尾部进行操作可以利用数组的属性 length 来实现,示例代码如下:
删除数组头部元素与在头部添加元素原理相同,都是利用 for 循环来实现,只不过删除头部元素是将数组中的整体元素前移,再删除一个元素,示例代码如下:
对于删除数组元素,JavaScript 也提供了三种简洁的方式:
下面将分别讲解这三种方法的使用。
pop() 方法可以在数组末尾删除一个元素,该方法是没有参数的,其方法的返回值为删除的元素,这个方法会影响原数组,示例代码如下:
需要注意的是,如果操作数组为空数组,则返回结果为 undefined:
shift() 方法可以在数组头部删除一个元素,该方法是没有参数的,其方法返回值为返回删除的元素,同样这个方法也会影响原数组,示例代码如下:
另外,如果操作数组为空数组,shift() 方法与 pop() 方法相同,返回结果也为 undefined。
splice() 方法可以删除数组中指定位置的元素,该方法有两个参数,第一个是索引位置,第二个是删除数据个数。示例代码如下:
数组是一系列有序数据的集合,数组中的每个数据都称作元素。元素可以是 JS 支持的任意类型。数组示例代码如下:
var arr = [1,"atguigu",true];这行代码定义了一个数组 arr,它的内部分别存储了三个数据:“1”、“atguigu” 和 “true”。
数组也是对象,可以使用 typeof 和 instanceof 进行检测:
console.log(typeof arr); // object console.log(arr instanceof Object) // true
但是数组是一种特别的对象,它拥有自己的特性。数组中每个元素都有一个下标(也被称作索引),从 0 开始依次递增。每定义一个数组,在该数组中都会有一个默认属性为 length,它代表着数组中元素的个数,也被称作数组的长度,示例代码如下:
console.log(arr.length); // 3 console.log(arr[0]); // 1 console.log(arr[1]); // atguigu console.log(arr[2]); // true下面介绍如何创建数组,以及对于数组元素的增删改查等操作。
JavaScript数组的创建
数组的创建方式与对象数据类型的创建相似,包括两种方式:一种是使用数组字面量创建;另一种是使用 Array 构造函数创建。以数组字面量的方式创建数组是直接使用中括号来包裹数据,中括号内以逗号间隔元素,而且数组字面量创建方式是使用频率较高的。示例代码如下:
var arr1 = [1, "atguigu", 3]; var arr2 = []; var arr3 = [3]; console.log(arr1); // [1, "atguigu", 3] console.log(arr2); // [] console.log(arr3); // [3]在这段代码中,使用数组字面量的方式定义了三个数组:arr1、arr2、arr3:
- arr1 中包含了三个元素:“1”“atguigu”,“3”;
- arr2 是一个空数组,内部没有元素;
- arr3 中只有一个元素“3”。
运行代码后,查看控制台,结果为:
[ 1, 'atguigu', 3 ] [] [ 3 ]
另一种使用 Array 构造函数创建数组,它是创建数组的本质。其实字面量创建数组的方式的底层原理就是使用该方法进行创建的,示例代码如下:
var arr1 = new Array(1, 2, 3); var arr2 = new Array("atguigu"); var arr3 = new Array(3); var arr4 = new Array(); console.log(arr1); // [1, 2, 3] console.log(arr2); // ["atguigu"] console.log(arr3); // [empty × 3] console.log(arr4); // []使用构造函数创建数组可以省略 new 关键字,与使用构造函数的方式结果相同。需要注意的是,当参数为一个数字时,该参数代表着数组的长度。
需要特别注意的是,使用构造函数创建数组可以省略 new 关键字,与使用 new 的方式结果相同,示例代码如下:
var arr1 = Array(1, 2, 3); var arr2 = Array("atguigu"); var arr3 = Array(3); var arr4 = Array(); console.log(arr1); // [1, 2, 3] console.log(arr2); // ["atguigu"] console.log(arr3); // [empty × 3] console.log(arr4); // []这段代码使用 Array() 的方式定义了 arr1、arr2、arr3、arr4 四个数组:
- arr1 中包含了三个元素:“1”、“2”、“3”;
- arr2 中只有一个元素:“atguigu”;
- arr3 中传递了一个数字,此时会返回一个长度为 3 的数组对象;
- arr4 定义了一个空数组,相当于“const arr4=[]”。
运行代码后,查看控制台,结果为:
[ 1, 2, 3 ] [ 'atguigu' ] [ <3 empty items> ] []
JavaScript添加数组元素
创建完数组后,我们就可以对其元素进行增删改查操作了。我们可以通过索引读取数组中对应位置的元素,同样也可以通过索引添加新元素,示例代码如下:
// 创建数组 const arr = new Array(); console.log(arr); // [] // 以下标的方式添加元素 arr[0] = 1; arr[1] = "atguigu"; console.log(arr); // [1, "atguigu"] console.log(arr[0], arr[1]); // 1 "atguigu"这段代码定义了一个空数组 arr,使用下标的方式向数组中添加了元素“1”和“atguigu”。此时数组中 arr[0] 的值为“1”,arr[1] 的值为“atguigu”。运行代码后,查看控制台,结果为:
[]
[ 1, 'atguigu' ]
1 atguigu
var arr = [1, 2, 3]; arr[3] = 1000; arr[arr.length] = 1000; console.log(arr);这段代码定义了数组 arr,里面包含三个元素:“1”、“2”、“3”。通过“arr[3]”的方式将 1000 赋值给 arr 数组中下标为 5 的元素,再通过“arr.length”得到 arr 数组的末尾(arr 数组中下标为 6),然后赋值为 1000。此时输出数组 arr,结果为:
[ 1, 2, 3, 1000, 1000 ]
另外,添加元素还可以借助 push() 方法和 unshift() 方法。
push() 方法用于实现在数组末尾添加一个或多个元素,其返回值为添加元素后的新数组的长度,语法格式如下:
push(item1, item2, ..., itemX);其中,item 分别表示添加到数组的元素。
示例代码如下:
var arr = [1, 2, 3]; console.log(arr.push("tom", "jerry")); // [1, 2, 3, "tom", "jerry"]
unshift() 方法可以向数组第一位新增一个或多个元素,语法格式如下:
unshift(item1, item2, ..., itemX);示例代码如下:
const arr = new Array(); console.log(arr); // [] arr.unshift(1); console.log(arr); // [1] arr.unshift("atguigu", 3); console.log(arr); // ["atguigu", 3, 1]
JavaScript遍历数组
访问数组每个元素的过程叫作遍历。数组遍历有 for、for...in、forEach、for...of 四种方法。下面介绍两种常见的遍历数组的方式,即 for 循环语句和 for...in 循环语句。使用 for 循环语句来遍历数组,是利用数组的 length 属性来控制 for 循环的执行次数,示例代码如下:
var arr = [1, 2, 3]; for (var i = 0; i < arr.length; i++) { console.log(arr[i]); }这段代码数组的第一个下标“0”作为起始循环值,在循环体内依次对数组中的每项值依次遍历。运行代码后,查看控制台,结果为:
1
2
3
for...in 循环是一种特殊类型的循环,它是普通 for 循环的变体,其语法格式如下:
for (variable in object) { // 循环体代码 }使用该方法需要传入两个参数,其中变量 variable 表示数组的下标,object 表示需要遍历的对象,在这里指的是数组。示例代码如下:
var arr = [1, 2, 3]; // 遍历 arr 数组 for (var i in arr) { console.log(arr[i]); }运行结果同普通 for 循环结果。因为 for 语句需要配合 length 属性和数组下标来实现,所以执行效率没有 for...in 语句高。另外,for...in 语句会跳过空元素。对于超长数组来说,建议使用 for...in 语句进行迭代。
JavaScript更新元素
通过前面的学习可以得知,可以使用下标更新对应的元素。如果想要更新多个元素要怎么操作呢?请思考这个问题,将数组 [1, 3, 5] 每个元素值都增加 10,如何实现?
此时可以通过循环语句的方式对数组中每个元素进行遍历,再进行更新操作,如下代码所示:
function addTen(arr) { for (var element = 0; element < arr.length; element++) { arr[element] = arr[element] + 10; } return arr; } var arr1 = [1, 2, 3]; var arrOver = addTen(arr1); console.log(arrOver); // [11, 12, 13]这段代码封装了函数 addTen,函数内部遍历了形参 arr,对每项元素加 10 并返回。从而实现了数组内元素的更新。运行代码后,查看控制台,结果为:
[ 11, 12, 13 ]
JavaScript删除数组元素
删除数组元素其实与数组添加元素的方式类似,可以在数组的头部、中间和尾部进行操作。对数组尾部进行操作可以利用数组的属性 length 来实现,示例代码如下:
var arr = [1, 2, 3, 4, 5]; // 第一次删除 arr.length = 1; // 第二次删除 arr.length = arr.length - 1; // 第三次删除 arr.length--; console.log(arr); // [1, 2] console.log(arr[4]); // undefined这段代码通过操作 length 属性,在数组的末尾进行了三次删除。因为在前面的操作中删除了 arr[4],所以最后输出 arr[4]返回的结果为 undefined。运行代码后,查看控制台,结果为:
[1, 2]
undefined
删除数组头部元素与在头部添加元素原理相同,都是利用 for 循环来实现,只不过删除头部元素是将数组中的整体元素前移,再删除一个元素,示例代码如下:
var arr = [1, 2, 3, 4, 5]; for (var i = 1; i <= arr.length - 1; i++) { arr[i - 1] = arr[i]; } arr.length--; console.log(arr); // [2, 3, 4, 5]这段代码使用 for 循环,将数组中索引大于 0 的元素全部向前移动一位。通过 arr.length-- 删除 arr 数组的末尾,实现将数组的头部第一个数删除。运行代码后查看控制台,结果为:
[2, 3, 4, 5]
对于删除数组元素,JavaScript 也提供了三种简洁的方式:
- 使用 pop() 方法删除数组最后一个元素;
- 使用 shift() 方法删除数组的第一个元素;
- 使用 splice() 方法删除数组中指定位置元素。
下面将分别讲解这三种方法的使用。
pop() 方法可以在数组末尾删除一个元素,该方法是没有参数的,其方法的返回值为删除的元素,这个方法会影响原数组,示例代码如下:
var arr = [1, 2, 3, 4]; var result = arr.pop(); console.log(arr); // [ 1, 2, 3 ] console.log(result); // 4这段代码使用 pop() 方法将 arr 数组的最后一位删除,返回结果为删除的数组元素“4”。运行代码后,查看控制台,结果为:
[ 1, 2, 3 ]
4
需要注意的是,如果操作数组为空数组,则返回结果为 undefined:
var arr = []; var result = arr.pop(); console.log(arr); // [] console.log(result); // undefined此时数组 arr 为空数组,运行代码后查看控制台,结果为:
[]
undefined
shift() 方法可以在数组头部删除一个元素,该方法是没有参数的,其方法返回值为返回删除的元素,同样这个方法也会影响原数组,示例代码如下:
var arr = [1, 2, 3, 4]; const result = arr.shift(); console.log(arr); // [ 2, 3, 4 ] console.log(result); // 1运行代码后查看控制台,结果为:
[ 2, 3, 4 ]
1
另外,如果操作数组为空数组,shift() 方法与 pop() 方法相同,返回结果也为 undefined。
splice() 方法可以删除数组中指定位置的元素,该方法有两个参数,第一个是索引位置,第二个是删除数据个数。示例代码如下:
var arr=[1,2,3,4,5,6,7,8,9,10]; console.log(arr); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] // 语法:arr.splice(n,m) n是开始的索引位置,m是个数 // splice(2,2),表示从索引位置为2的位置开始删除,删除两个 arr.splice(2,2); console.log(arr); // [ 1, 2, 5, 6, 7, 8, 9, 10 ]运行代码后查看控制台,结果为:
[
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
]
[
1, 2, 5, 6,
7, 8, 9, 10
]