什么是数组?
数组 : 是一种复杂数据类型
数组作用 : 可以在变量中 ‘存储多个数据’
数组内存原理 : 数组内存由三个部分组成(数组三要素)
元素: 数组中的数据
下标: 元素的位置
长度: 元素的数量
1.数组语法
1.1数组声明
数组声明: let 数组名 = [元素1,元素2,元素3,…]
let arr = [23, 56, 78, 89, 12]
1.2数组取值
数组取值 : 数组名[下标]
console.log(arr[2])
查询元素下标
indexOf()
let arr=[10,20,30,40]
log(arr.indexOf('10'))//0
1.3数组长度
数组长度 : 数组名.length
console.log(arr.length)
1.4数组遍历
数组遍历: 依次读取数组每一个元素
固定格式的for循环:
for(let i = 0;i < arr.length ;i++){
arr[i]
}
let arr = [3, 6, 7, 9, 3, 5]
for (i = 0; i < arr.length; i++) {
console.log(arr[i])
}
2.数组操作
2.1查询
数组取值(查) : 数组名[下标]
let arr = [2, 5, 6, 3, 7, 9]
console.log(arr[2])
console.log(arr[6])
(1)如果下标存在,则是获取元素值
(2)如果下标不存在,则是获取undefined
2.2修改
数组赋值(改): 数组名[下标] = 值
let arr = [2, 5, 6, 3, 7, 9]
arr[2] = 4
console.log(arr)
arr[6] = 10
console.log(arr)
arr[10] = 8
console.log(arr)
(1)如果下标存在,则是修改元素值
(2)如果下标不存在,则是新增元素
2.3新增
let arr = [10, 20, 30, 40]
arr.push(50, 60)
console.log(arr)
arr.unshift(1, 2)
console.log(arr)
(1)数组名.push(元素):一个或多个元素,添加到数组末尾
(2)数组名.unshift(元素):一个或多个元素,添加到数组开头
2.4删除
let arr = [10, 20, 30, 40, 50]
arr.pop() //删除最后一个元素
arr.shift() //删除开头一个元素
(1)数组名.pop() :删除数组最后一个元素
(2)数组名.shift() :删除数组第一个元素
()小括号里不写值
(3)数组名.splice(下标,数量) :从指定下标开始删除指定数量的元素
let arr = [10, 20, 30, 40, 50]
arr.splice(2, 1) //从下标2的元素开始删除一个
let arr1 = [10, 20, 30, 40, 50]
arr1.splice(2, 1, 60, 70)
console.log(arr1);
arr.splice(下标, 删除的个数)
arr1.splice(下标, 删除的个数, 在删除位置新增的数, 在删除位置新增的数)
3.数组应用
3.1数组求和
思路:
(1)声明一个变量存储结果
(2)遍历数组中每一个元素
(3)累加
//求一组数据的总和
let arr = [11, 22, 33, 44, 55, 66]
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum += arr[i]
}
console.log(sum)
//求一组数据偶数的总和
let arr1 = [11, 22, 33, 44, 55, 66]
let sum1 = 0
for (let i = 0; i < arr1.length; i++) {
if (arr[i] % 2 == 0) {
sum1 += arr1[i]
}
}
console.log(sum1)
3.2数组求最大值/最小值
思路:
(1)声明变量默认为第一个元素
(2)遍历数组
(3)依次比较大小,然后赋值
//求最大值
let arr = [11, 88, 22, 66, 33, 44, 55]
let max = arr[0]
for (let i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i]
}
}
console.log(max)
//求最小值
let arr1 = [11, 88, 22, 66, 33, 44, 55]
let min = arr[0]
for (let i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i]
}
}
console.log(min)
3.3筛选数组
思路:
(1)声明新数组
(2)变量数组,找出符号条件的元素
(3)将符号条件的元素放入新数组中
//需求:将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来,放入新数组
let arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7]
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] > 10) {
newArr.push(arr[i])
}
}
console.log(newArr)
实际开发场景:去除数组中指定的元素,生成新数组
(1)微信账单: 收入 + 支出。 需求是只看收入(支出类型去除)
(2)商品列表 : 京东自营(把非自营商品去除)
3.4数组去0
//需求:将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中的 0 去掉后,形成一个不包含 0 的新数组
let arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7]
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
newArr.push(arr[i])
}
}
console.log(newArr)
3.5根据数组生成柱状图
/*需求
(1)让用户输入四个季度数据,存入数组中
(2)根据数组中的数据,生成页面柱状图
*/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
display: flex;
justify-content: space-around;
align-items: flex-end;
width: 800px;
height: 500px;
margin: 50px auto;
border-bottom: 1px solid #000;
border-left: 1px solid #000;
}
.box div {
display: flex;
flex-direction: column;
justify-content: space-between;
flex-wrap: nowrap;
align-items: center;
width: 50px;
height: 50px;
background-color: skyblue;
}
.box div span {
margin-top: -20px;
}
.box div h3 {
width: 80px;
margin-bottom: -25px;
}
</style>
</head>
<body>
<script>
let arr = []
for (let i = 1; i <= 4; i++) {
let num = +prompt(`请输入第${i}个季度的数据`)
arr.push(num)
}
console.log(arr)
document.write('<div class="box">')
for (let i = 0; i < arr.length; i++) {
document.write(`<div style="height:${arr[i]}px">
<span>${arr[i]}</span>
<h3>第${i+1}季度</h3>
</div>`)
}
document.write('</div>')
</script>
</body>
</html>
3.6根据数组生成手风琴盒子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
overflow: hidden;
display: flex;
width: 1120px;
height: 260px;
margin: 50px auto;
}
.box div {
width: 120px;
border: 1px solid #fff;
transition: all .5s;
}
.box div:hover {
width: 400px;
}
</style>
</head>
<body>
<script>
let arr = [
'./images/1.jpg',
'./images/2.jpg',
'./images/3.jpg',
'./images/4.jpg',
'./images/5.jpg',
'./images/6.jpg',
'./images/7.jpg',
]
document.write('<div class="box">')
for (let i = 0; i < arr.length; i++) {
document.write(`<div><img src="${arr[i]}" alt=""></div>`)
}
document.write('</div>')
</script>
</body>
</html>
3.7案例
让用户输入五个有效年龄(0-100之间),放入数组中,必须输入五个``有效年龄年龄,如果是无效年龄,则不能放入数组中
思路一:
循环三要素:
循环次数:有效次数5次(for)
循环条件:i<=5
循环体:输入年龄
let arr = []
for (let i = 1; i <= 5; i++) {
let age = +prompt(`请输入第${i}个有效年龄`)
if (age >= 0 && age <= 100) {
arr.push(age)
} else {
i--
}
}
思路二:
循环三要素:
循环次数:没有次数(while)
循环条件:数组长度<5
循环体:如果是0~100间加入数组
let arr = []
while (arr.length < 5) {
let age = +prompt(`请输入第${arr.length+1}个有效年龄`)
if (age >= 0 && age <= 100) {
arr.push(age)
}
}