目录
一、数组的创建
数组:由多个变量组合在一起
1.数组的创建1 var
- 依然需要使用var关键字 来创建
- 对于数组来说,可以添加任意的数据类型
var arr = ['a', 'b', 'c', 'd', 'e'];
var students = ["赵美丽", 28, true, "🚹", 145];
var arr1 = [];
// 空数组
console.log(typeof students);
// object 复杂数据类型
2.数组的创建2 new Array()
- 通过 new Array() 来创建数组
- 通过构造函数来创建
var arr2 = new Array();
var students = ["赵美丽", 28, true, "🚹", 145];
- 直接量创建的数组可以在中间添加空值
- 构造函数创建的数组不可以添加空值
- 会直接报语法错误
var arr3 = [1, 2, , , 5, 6];
二、数组包含的属性
- 数组的索引下标 从0开始
- 长度 数组的值的个数 arr.length
var arr = [1, 2, 3, 'a', 'b'];
// 0 1 2 3 4
console.log(arr.length);
- 长度与下标的关系:长度-1 = 下标的最大值
- 只要是数组 就一定会有长度
数组长度 可以修改
- 如果改后大于原本长度 会增加相对应的空值
- 如果小于原本长度 会删除多余的值
var arr = [1, 2, 3, 'a', 'b'];
console.log(arr);
console.log(arr.length);
arr.length = 10;
console.log(arr);
console.log(arr.length);
arr.length = 2;
console.log(arr);
console.log(arr.length);
三、数组的访问和修改
1.数组的访问
- 通过索引下标 来访问数组中的元素
数组名称[索引下标]
var arr = ['liubang', 'wangwu', 'zhaoliu'];
console.log(arr[0]);
console.log(arr[2 + 1]);// undefined
console.log(arr[-1]); //undefined
2.数组的修改
- 通过索引下标 来修改数组中的元素
- 除了正整数的索引下标,其余负数、小数都不会改变长度length,但都可以打印出来
- 数组长度只计算正整数
数组名称[索引下标] = 新值
var arr1 = [1, 2, 3];
arr[2] = "liubang";
四、数组遍历
只要重复,就用for循环
var arr = ['刘邦', '张良', '韩信', '萧何', '刘备', '韩信', '萧何'];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
五、多维数组
- 当访二维数组时,先访问第一个,再访问第二个
var arr = [
[1, 2, 3],
["a", "b", "c"]
];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
console.log(arr[i][j]);
}
}
六、最值
- 最值只针对纯数字的数组
var arr = [11, 52, 73, 44, 15];
// 求最值的方法
var max = arr[0];
var min = arr[0];
for (var i = 0; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
if (min > arr[i]) {
min = arr[i];
}
}
console.log(max);
console.log(min);
七、栈方法和队列方法
1. 方法的参数 2.方法的返回值 3. 是否改变原本的数组
1.push
(1)添加元素 在元素的末尾的位置添加,需要几个就可以添加几个
(2)参数 需要添加的元素 可以写多个,之间使用逗号分隔
(3)返回值 会返回一个添加完之后的数组的长度
(4)会改变原本的数组
var arr = [1, 2, 3, 4, 5];
arr.push('溜溜溜', '嘁嘁嘁', '叭叭叭');
2.pop
(1)删除元素 删除末尾位置的一个元素,只能删除一个
(2)参数 不需要参数
(3)返回值 返回删除的元素
(4)会改变原本的数组
var arr = [1, 2, 3, 4, 5];
arr.pop();
3.unshift
(1)添加元素 在元素的头部的位置添加 ,需要几个就可以添加几个
(2)参数 需要添加的元素 可以写多个,之间使用逗号分隔
(3)返回值 会返回一个添加完之后的数组的长度
(4)会改变原本的数组
var arr = [1, 2, 3, 4, 5];
arr.unshift('咯咯咯');
4.shift
(1)删除元素 删除头部的位置的一个元素 ,只能删除一个
(2)参数 不需要参数
(3)返回值 返回删除的元素
(4)会改变原本的数组
var arr = [1, 2, 3, 4, 5];
arr.shift();
- 栈方法 先进后出
- 队列方法 先进先出
八、检索方法
1.includes(参1,参2)
- 用于 查找 是否包含某个元素 返回 布尔值 采用的是全等于
- 参数 1.需要查找的元素 2.从哪个位置开始查找 索引下标
- 如果超过最大的索引下标那么不会在检索了 -1 表示 为最后一个元素
- 如果 arr.length + 查询的开始位置的数字 为 负数 那么就会从头开始检索
- 返回值 布尔值 是否找到的结果
-
不会改变原本的数组
var arr = [1, 2, 3, 4, 1];
console.log(arr.includes(9)); // false 没有找到
console.log(arr.includes('1')); //false 没有找到
2.indexOf(参1,参2)
- 用于 查找 是否包含某个元素 返回 索引下标 第一次出现的位置 采用的是全等于
- 参数 1.需要查找的元素 2从哪个位置开始查找 索引下标
- 如果超过最大的索引下标那么不会在检索了 -1 表示 为最后一个元素
- 返回值 索引下标 没有找到返回 -1
- 不会改变原本的数组
var arr = [1, 2, 3, 4, 1];
console.log(arr.indexOf(99)); // -1 没有找到
console.log(arr.indexOf(1, 1)); // 4
九、数组转字符串
1.join('')
- join 数组转字符串
- 将数组里面的每一个元素分别拿出来 拼接到一个字符串中
- 参数 每一个元素的分隔符
- 返回值 返回由内容组成的字符串
- 不会改变原数组
var arr = ['a', 'b', 'c'];
console.log(arr.join('+')); // a+b+c
2.toString()
- 参数 没有参数
- 返回值 返回由内容组成的字符串 中间使用逗号分隔
- 不改变原数组
var arr = ['a', 'b', 'c'];
console.log(arr.toString('❤')); // a,b,c
十、其他
1.isArray
- 判断传入的是否是一个数组 和isNaN 一样
- 参数 就是需要检测的变量
- 返回值 布尔值 是否是一个数组
- 不改变原数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var arr1 = 3;
console.log(Array.isArray(arr1)); //false
console.log(Array.isArray(arr)); //true
2.splice(参1,参2,参3) 增 删 改
- 增 删 改
- 参数 参数1 需要增加 删除 修改的起始位置(必须的) 会到哪个地方
- 参数2 需要删除的个数(可选)
- 参数3 增加的元素(可选)
- 返回值 被修改的内容
- 改变原数组
增
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.splice(2, 0, "你好");
console.log(arr); //[1, 2, '你好', 3, 4, 5, 6, 7, 8, 9]
删
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.splice(1, 2);
console.log(arr); //[1, 4, 5, 6, 7, 8, 9]
改
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.splice(2, 3, "三", "四", "五");
console.log(arr.splice(2, 3, "三", "四", "五")); //['三', '四', '五']
console.log(arr); //[1, 2, '三', '四', '五', 6, 7, 8, 9]
3.slice(参1,参2) 截取数组
- slice 截取数组
- 参数1 起始位置 参数2 结束位置 (不包含结束位置)
- 如果参数只有开始 没有结束 那么会从开始一直到最后
- 如果参数只有一个0 那么会原封不动的把数组打印一遍
- 返回值 截取出来的数组
- 不会改变原数组
var arr2 = [1, 2, 3, 4, 5];
console.log(arr2.slice(1, 3)); //[2, 3]
console.log(arr2.slice(1)); //[2, 3, 4, 5]
console.log(arr2.slice(0)); //[1, 2, 3, 4, 5]
console.log(arr2.slice(1, -2)); //[2, 3]
arr2.slice(1, 4);
console.log(arr2); //[1, 2, 3, 4, 5]
4.reverse() 颠倒数组
- reverse 颠倒数组
- 参数 不需要
- 返回值 颠倒之后的数组
- 改变原数组
var arr3 = [1, 2, 3, 4, 5];
console.log(arr3); //[1, 2, 3, 4, 5]
console.log(arr3.reverse()); //[5, 4, 3, 2, 1]
5.concat 合并多个数组
- 将参数里面的数组合并到当前数组中
- 返回合并之后的数组
- 不会改变原数组
var arr6 = ['a', 'b'];
var arr7 = [1, 2, 3];
console.log(arr7.concat(arr6)); //[1, 2, 3, 'a', 'b']
十一、冒泡排序
相邻的两两比较大小 比较之后若需改变位置则直接交换
for (var i = 0; i < arr.length - 1; i++) {
//所有的元素比较 到倒数第二个元素比完之后,最后一个元素不需要再次比较,故-1
for (var j = 0; j < arr.length - i - 1; j++) {
//比较完毕的元素不需要再比较,故-i
//新比较元素不需要与已完成的元素比较,故-1
if (arr[j] > arr[j + 1]) {
var temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//解构,增加一个新的变量,交换数值
}
}
}