数组数据类型
- 什么是数组
- 数组字面意思就是存放数字的一个组合, 但这么说太过于片面, 更完善的说法应该是
数组是存放一些数据的集合 - 简单来说我们把数据放到一个盒子中, 这个盒子就是数组, 注意数字内的数据是有顺序的
- 总结:数组是存放一些数据的集合也是引用数据类型(复杂数据类型)
- 目前属于复杂数据类型的是:数据/对象/函数
- 数组字面意思就是存放数字的一个组合, 但这么说太过于片面, 更完善的说法应该是
var arr = [1, 2, 3, "qwe", "abc", true, false, undefined, null];
// 我们把一堆数据存放到一个盒子中, 这就叫做数组 对应我们上述的 数组是存放一些数据的集合
数组和对象将来如何选择?
示例:商品的详情存放到某一个对象中, 比如: 商品名, 商品价格, 商品折扣, 商品描述.... 商品列表假设有 100个商品, 那么你就有100个商品详情, 按照上述的封装那么你有100个对象 我们可以将 这 100个 对象, 存放到某一个数组中, 进行维护管理
创建数组数据类型
数组内部是存放一些数据的, 数据的类型没有限制 但是在开发的时候一般需要将一个数组内的数据类型限制为一个 比如: 纯字符串数组, 纯数字数组, 纯对象数组 注意 函数不能够写在数组里面
- 使用字面量的方式创建数组
// 创建一个空数组
var arr = [];
// 创建一个有内容的数组
var arr1 = [1, 2, 3];
- 内置构造函数创建数组
// 创建一个空数组
var arr = new Array()
// 创建一个有长度的数组
var arr1 = new Array(10)
// 创建一个有内容的数组
var arr2 = nee Array(1, 2, 3)
数组的 length 属性
length 就是长度的意思, 代表数组内有多少个成员(数据)
var arr = [1, 2, 3];
console.log(arr.length); // 3
var arr1 = [4, 5];
console.log(arr1.length); // 2
数组的 索引 概念
- 索引也叫做下标, 就是指一个数据在这个数组内排列在第几个位置上
- 注意: 在所有的语言中, 索引(下标)都是从 0 开始的
var arr = ["hello", "world"];
// 在这个数组中, 第一个数据(元素)是 'hello', 那么它的下标就是 0, 后续的 'world', 下标为1
// 想要获取数组中某一个位置上的数据(元素), 可以直接 数组名[下标]
console.log(arr[0], arr[1]);
for 循环遍历数组
遍历数组就是想办法拿到数组的每一个元素, 通常我们可以通过下标获取到元素的某一项, 所以我们只需要想办法拿到数组的所有下标即可
var arr = [1, 2, 3, "qwe", "abc", true, false, undefined, null];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
数组基本操作案例
- 冒泡排序
var arr = [9, 6, 3, 1, 4, 7, 8, 2, 5];
console.log("原始数组: ", arr);
for (var i = 0; i < arr.length - 1; i++) {
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);
- 选择排序
var arr = [9, 6, 3, 1, 4, 7, 8, 2, 5];
console.log("原始数组: ", arr);
for (var j = 0; j < arr.length; j++) {
// 1. 假定数组中的第 0 个是最小数字的索引
var minIndex = j;
// 2. 遍历数组找到数组中最小的哪一项的下标将其替换之前记录的索引
for (var i = j; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
// 3. 遍历结束, 找到最小的索引, 将两个位置的数据对换
var temp = arr[j];
arr[j] = arr[minIndex];
arr[minIndex] = temp;
}
console.log("排序结束后: ", arr);
数组常用方法
- push; pop; unshift; shift;
- push
- 语法:
数组名.push(数据) - 作用: 向数组末尾添加数据
- 返回值: 追加数据后, 数组最新的长度
- 语法:
- pop
- 语法:
数组名.pop() - 作用: 删除数组最后一条数据
- 返回值: 被删除的数据
- 语法:
- unshift
- 语法:
数组名.unshift(数据) - 作用: 向数组开头添加数据
- 返回值: 添加数据后, 数组最新的长度
- 语法:
- shift
- 语法:
数组名.shift() - 作用: 删除数组第一条数据
- 返回值: 被删除的数据
- 语法:
- push
- reverse; sort; splice; indexOf;
- reverse
- 语法:
数组名.reverse() - 作用: 反转数组
- 返回值: 反转后的数组
- 语法:
- sort
- 语法:
数组名.sort(); 数组名.sort((a, b) => a - b); 数组名.sort((a, b) => b - a)- 不传参数: 会将数据转换为字符串后, 一位一位的对比
- 回调函数内进行 a - b, 那么会按照数字大小升序排序
- 回调函数内进行 b - a, 那么会按照数字大小降序排序
- 作用: 根据参数对数组数据实现排序
- 返回值: 排序后的数组
- 语法:
- splice
- 语法:
数组名.splice(开始索引, 多少个); 数组名.splice(开始索引, 多少个, 插入数据1, 插入数据2, ...) - 作用: 截取数组部分内容, 并选择性插入内容
- 返回值: 截取出来的部分内容组成的新数组
- 语法:
- indexOf
- 语法:
数组名.indexOf(要检查的数据); 数组名.indexOf(要检查的数据, 开始索引) - 作用: 从前到后检查该数据第一次在该数组内出现的索引位置
- 返回值: 如果在数组内找到了该数据, 那么会返回该数据第一次出现的索引位置, 没找到返回 -1
- 语法:
- reverse