文章目录
JavaScript 数组
一、数组的简介
- 数组(Array):用来存储一组相关的值,从而进行求和、计算平均数、逐项遍历等操作
二、数组的定义方法
- 方法1:
- 方法2:
- 方法3:(这4项都是undefined)
三、访问数组项
- 数组每一项都有下标,下标从 0 开始
- 可以使用方括号中书写下标的形式,访问数组的任一项
console.log(arr[0]); //A
- 访问数组中不存在的项会返回undefined,不会报错
console.log(arr[10000]); //undefined
四、数组的长度
- 数组的 length 属性表示它的长度
- 数组的最后一项的下标是数组的长度减 1
五、更改数组项
- 数组中任何项的值都可以修改
- 如果更改的数组项超过了 length-1,则会创造这一项
六、数组的遍历
- 数组的最大优点就是方便遍历
七、数组类型的检测
- 数组用 typeof 检测结果是 object
Array.isArray()
方法可以用来检测数组(返回布尔值,兼容到 IE8)
八、数组的常用方法
1. 数组的头尾操作
push()
方法:- 用来在数组末尾推入新项,参数就是要推入的项
- 如果要推入多项,可以用逗号隔开
- 调用
push()
方法后,数组会立即改变,不需要赋值
pop()
方法:- 用来删除数组中的最后一项
pop()
方法不仅会删除数组末项,而且会返回被删除的项
unshift()
方法:- 用来在数组头部插入新项,参数就是要插入的项
- 如果要插入多项,可以用逗号隔开
- 调用
unshift()
方法后,数组会立即改变,不需要赋值
shift()
方法:- 用来删除数组中下标为 0 的项
shift()
方法不仅会删除数组首项,而且会返回被删除的项
2. 数组的其他操作
splice()
方法:- 用于替换数组中的指定项
arr.splice(要开始替换的项的下标,要连续替换的项的数目,要替换上的项(可以有多项))
- 用于在指定位置插入新项
arr.splice(要插入的位置的下标, 0, 要插入的项(可以有多项))
- 用于删除指定位置的项
arr.splice(要开始删除的项的下标,1/要连续删除的项的数目)
splice()
方法会以 数组形式 返回被删除的项
- 用于替换数组中的指定项
slice()
方法:- 用于得到子数组,类似于字符串的 slice() 方法
slice(a,b)
截取的子数组从下标为 a 的项开始,到下标为 b (但不包括下标为b的项)的项结束slice(a,b)
方法不会更改原有数组slice(a)
截取的子数组为从下标 a 开始到 数组末尾 的所有项slice()
方法的参数允许为负数,表示数组的倒数第几项
concat()
方法:- 用来合并连结多个数组
concat()
方法不会改变原数组
- 用来合并连结多个数组
reverse()
方法:- 用来将一个数组中的全部项的顺序置反
- 用来将一个数组中的全部项的顺序置反
indexOf()
方法:- 用来搜索数组中的元素,并返回它的所在位置,如果元素不存在则返回 -1
includes()
方法:- 用来判断一个数组是否包含一个指定的值,返回布尔值
sort()
方法:- 用来将数组排序,这个方法的参数又是一个函数
- 这个函数中的 a、b 分别表示数组中靠前和靠后的项,如果需要将它们交换位置,则返回任意正数;否则返回负数
- 用来将数组排序,这个方法的参数又是一个函数
arr.sort(function (a, b) {
return a - b;
});
3. 数组与字符串
join()
方法:- 使数组转为字符串
join()
的参数表示以什么字符作为连接符,如果留空则默认以逗号分隔(如同调用toString()
方法)
split()
方法:- 使字符串转为数组
split()
的参数表示以什么字符拆分字符串,一般不能留空
- 字符串也可以使用 方括号内写下标的形式 访问某个字符,等价于
charAt()
方法
4. 数组去重
<script>
var arr = [1, 1, 1, 2, 2, 3, 3, 3, 2, 1];
var result = [];
for (var i = 0; i < arr.length; i++) {
if (!result.includes(arr[i])) {
result.push(arr[i]);
}
}
console.log(result);
</script>
5. 数组的随机样本
<script>
var arr = [3, 6, 10, 5, 8, 9];
var result = [];
for (var i = 0; i < 3; i++) {
var n = parseInt(Math.random() * arr.length);
result.push(arr[n]);
arr.splice(n,1);
}
console.log(result);
</script>
九、数组的排序
1. 冒泡排序
- n 个数字,共需要比较 n-1 趟,比较次数为 n(n-1)/2 次
<script>
var arr = [6, 2, 9, 3, 8, 1];
for (var i = 1; i < arr.length; i++) {
for (var j = arr..length - 1; j >= i; j--) {
if (arr[j] < arr[j-1]) {
var temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
console.log(arr);
</script>
十、二维数组
- 二维数组:以数组作为数组元素的数组
- 二维数组可以看做是矩阵 matrix
1. 二维数组的定义
var matrix = [
[11,33,55],
[22,33,44],
[36,49,52],
[56,10,23]
];
2. 二维数组的遍历
<script>
var matrix = [
[11,33,55],
[22,33,44],
[36,49,52],
[56,10,23]
];
console.log(matrix.length); //4
//循环输出二维数组中的每一个项
for (var i = 0; i < 4; i++) {
console.log(matrix[i][j]);
}
}
</script>