数组(Array)
什么是数组
-
数组:是一种数据类型,属于引用数据类型。
-
作用:在单个变量名下存储多个数据。
-
注意:
- 数组是按顺序保存(有序)的,
- 编号从0开始,数据编号称为索引或下标,
- 数组可以存储任意类型的数据。
基本使用
定义数组
声明语法:
let 数组名 = [数据1, 数据2, ..., 数据n]
let names = ['小明', 'niuniu', 'zhuzhu']
访问数组
//数组名[下标]
let names = ['niuniu', 'zhuzhu', 'yaya']
names[0] // niuniu
names[2] // yaya
```
遍历数组
- 遍历数组:把数组中的每个数据都访问到。
- 使用场景:for 循环。
- 数组元素: 数组中的数据。
- 数组的长度:数组名.length属性,数组中数据的个数。
// 遍历数组
for (let i = 0; i < names.length; i++) {
console.log(names[i])
}
数组的操作
-
数组的本质是数据集合。
-
操作语法:增、删、改、查
-
查询语法
//数组[索引] //返回值:如果查询不到,则返回 undefined let arrs = [1, 'niuniu', true] //1. 查询 console.log(arrs[2]) console.log('-----')
-
修改语法
//数组[索引] = 新值 //返回值: 如果下标不存在,则新增一个数组元素(尽量避免) // 2. 修改 arrs[2] = false arrs[4] = 'yaya' console.log(arrs[2]) console.log(arrs) console.log('-----')
-
新增语法
//1. 数组.push(新增数据) //作用:将一个或多个元素添加到数组的 末尾 //返回值:该数组的新长度,会修改原数组 //3. 新增 let res = arrs.push('lili') console.log(res) console.log(arrs) //2. 数组.unshift(新增数据) //作用:将一个或多个元素添加到数组的 开头 //返回值:该数组的新长度,会修改原数组 let res1 = arrs.unshift('zhuzhu') console.log(res1) console.log(arrs)
-
删除语法
//1. 数组.pop() //作用:从数组中删除 最后一个元素 //返回值:该元素的值,会修改原数组 //4. 删除 let res2 = arrs.pop() console.log(res2) console.log(arrs) //2. 数组.shift() //作用:从数组中删除 最前面一个元素 //返回值:该元素的值,会修改原数组 let res3 = arrs.shift() console.log(res3) console.log(arrs)
-
可以删除也可以添加
//1. 删除 数组.splice(start,deleteCount) //start:指定修改的开始位置 //deleteCount:删除个数 //2. 添加 数组.splice(start,deleteCount,item1...) //item:添加的元素
数组排序
-
语法:数组.sort(),会改变原数组
let arr = [30,7,90,0,1] //1. 升序 arr.sort(function (a, b) { return a - b }) console.log(arr) //[0, 1, 7, 30, 90] //2. 降序 arr.sort(function (a, b) { return b - a }) console.log(arr) //[90, 30, 7, 1, 0]
选择排序算法
-
选择排序原理:就是从第一个数开始,与后面所有的数相比,找出最小(最大)的数,放在第一个位置。以此类推,每一轮确定一个相对于这一轮最小(最大)的数。
-
算法核心:利用循环嵌套比较,根据索引号来交换变量。
①:外层循环是一共进行几轮相比较,通过观察,一共进行数组长度-1 次比较
- for (let i = 0; i < arr.length - 1; i++)
- 把 i作为最小值起始索引 minIndex
②:里层循环是每一轮的比较来查找最小值
- 里层循环起始值是 i + 1 个元素开始查找
- for (let j = i + 1; j < arr.length; j++)
- 进行比较的时候,发现最小的数组元素,把当前元素索引号给 minIndex
③:如果 minIndex 和 i 位置不一致,则交换变量
//算法核心:利用循环嵌套比较,根据索引号来交换变量。 let arr = [10,4,8,45,3] //1. 外层循环: 一共进行几轮比较 for(let i = 0; i < arr.length - 1; i++) { //2. 设置最小起始索引 minIndex => i=0 let minIndex = i //3. 内层循环: 每一轮的比较 找到最小值 for (let j = i + 1; j < arr.length; j++) { //4. 判断: 比较最小的元素 if (arr[minIndex] > arr[j]) { //5. 把当前元素索引号给 minIndex minIndex = j } //6. 判断:如果 minIndex 与 i 的位置不一样,则交换变量 if (minIndex != i) { let temp = arr[minIndex] arr[minIndex] = arr[i] arr[i] = temp } } } console.log(arr)