变量作用域的问题:
- 循环次数已经的时候 for循环比较方便
- 循环次数未知的使用while,或者 do…….while更方便
4.2-day5-js数组
一、数组
目标:掌握数组,把一堆数据有序管理起来
学习路径:
- 数组是什么
- 数组的基本使用
- 遍历数组
- 数组和对象的说明
- 数组方法
1.1 数组是什么
目标:能说出数组是什么
- 数组(Array)是一种可以按顺序保存数据的数据类型
为什么要数组?
- 思考:如果我想保存一个班里5个人的姓名怎么办?
- 如果有多个数据可以用数组保存起来
<script>
//数组(Array)是一组有序的数据的集合,数组里边看可以保存任意的数据类型
//数组管理数据用编号来管理,下标(索引)
//声明数组 let 数组名={数据1,数据2,......,数据n}
//索引(下标) 0 1 2 3
let names = ['小蜜瓜', '小米', '小白', '小黑']
//读取数组中的元素,数组明[下标]
document.write(names[0])
document.write(names[3])
</script>
1.2 数组的基本使用
目标:能够声明数组并且能够获取里面的数据
声明语法
- let 数组名 =[数组1,数组2,…….,数据n ]
例
- let names = [‘小明’,’小刚’,’小红’,‘小路’,‘小米’ ]
- 数组是按顺序保存,所以每个数据都有自己的编号
- 计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推
- 在数组中,数据的编号也叫
索引或下标
- 数组可以存储任意类型的数据
案例:
//定义一个数组,里边存放星期一 —— 星期日,在控制打印星期日
let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
let day = week[6]
console.log(day)
4.一些特点:
- 数组声明完了后,也可以通过下标动态添加数组元素
<script>
let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
//数组明.length 数组的长度(数组里边元素的个数)
//console.log(week.length);
//动态的添加数组元素, 数组名[索引值] = 值
week[7] = '小徒弟'
//相同的索引,回覆盖掉
// week[3] = '西红柿'
console.log(week)
console.log(week.length);
</script>
1.3遍历数组
目标:能够遍历输出数组里面的元素
遍历数组:
用循环把数组中每个元素都访问到,一般会用for循环遍历
for(let i = 0; i<数组名.lenght;i++ ){
数组名[i]
}
遍历数组:
//数组遍历 就是将数组中的每个元素读取出来,for循环数组遍历
let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日', '哈哈哈', '到达']
console.log(week.length);
//数组长度永远比最大的索引值大1
for (let i = 0; i <= week.length; i++) {
console.log(week[i]);
}
课堂案例:
//案例:求数组所有元素的和,把数组里边的每一个元素累加到sum里面
let arr = [2, 6, 1, 7, 4]
//1.声明一个求和的变量 sum
let sum = 0
//2.循环遍历数组,把数组里边的
for (let i = 0; i <= arr.length; i++) {
// sum =sum+arr[i]
sum += arr[i]
}
document.write(`数组的和:${sum}<br>`)
//3.用求和的结果sum/数组元素个数(arr.length)
document.write(sum / arr.length)
--------------------------------------------------------------------------
用函数就行封装:
//求数组所有元素的和,以及平均值
//1.实参和形参 2.功能
//形参接受的数组
function getSum(arr) {
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum += arr[i]
}
let avg = sum / arr.length
//返回值是一个数组
return [sum, avg]
}
let res = getSum(num)
console.log(res);
//打印输出
let res1 = getSum(num1)
document.write(res1)
1.4 数组和对象的说明
目标:能够遍历输出对象里面的元素
数组也属于对象类型
数组返回的数据类型是 object
对象也可以通过 [ ] 访问属性值
对象也可以被遍历
//数据也属于对象类型 object
let arr = [1, 2, 3]
//对象由属性和方法组成
let obj = {
//键值对 一对数据,通过不同的方式连在一起
//键名 值
//key value
uname: '王浩',
age: '21'
}
遍历对象
- 一般不用这种方式遍历数组、主要是用来遍历对象
- 一定记住: k 是获得对象的属性名, 对象名[k] 是获得 属性值
//遍历对象 访问对象的每一个属性(属性值)
for (let key in obj) {
//获取属性
console.lof(key);
// 获取属性值 对象名[key] 注意key不要加引号
console.log(obj[key]);
}
//访问对象的属性
console.log(obj.uname);
console.log(obj['age'])
1-1随机点名案例:
<script>
//随机点名
//1.声明数组
let arr = ['毛毛', '大猫', '二狗子', '三毛', '小李子', '李富贵', '大黄', '悟空']
// 核心需求 就是将索引值 变成随机整数
// 生成[0,1]的随机数, 需求[0,8]的随机数
let i = Math.floor(Math.random() * arr.length)
document.write(arr[i])
</script>
1-2遍历数据:
let students = [
{ name: '小红',age: 18,sex: '女',hometown: '河北'},
{ name: '小绿',age: 22,sex: '男', hometown: '河南'},
{name: '小青',age: 220,sex: '女',hometown: '峨眉山' },
{name: '素贞', age: 520,sex: '女',hometown: '青城山'}]
for (let i = 0; i <= students.length; i++) {
//students[i] 获取数组中每一个对象元素, students[i].name 获取对象中name的属性
console.log(students[i].name)
}
1.5 数组方法
目标:能使用数组方法对数组进行添加删除元素操作
数组做为对象数据类型,不但有 length 属性可以使用,还提供了许多方法
- push() 动态向数组的尾部添加一个单元
- unshift() 动态向数组头部添加一个单元
- pop() 删除最后一个单元
- shift() 删除第一个单元
splice() 动态删除任意单元
- splice(从那里位置开始删,删除多少个)
let arr = ['好好', '信息', '加啊', '小宝', '撒娇大']
console.log(arr);
// 数组名 .push(数据) 动态的向数组的末尾添加元素
arr.push('阿瑟将军艾森')
// 数组名 .unshift(数据) 动态的向数组的头部添加元素
arr.unshift('小牙印')
// 数组名.(数据) 删除数组的最后一个元素
arr.pop()
// 数组名 .() 删除数组的第一个元素
arr.shift()
console.log(arr);
// 数组名 .splice(索引值,删除的个数) 从索引值的元素开始删除
arr.splice(1, 2)
1-3案例-求数组成绩的最高分
//求最高分 和 平均分
let arr = [15, 87, 179, 94, 90, 200, 30]
// 假设第1个元素是最大值
let max = arr[0]
let sum = 0
for (let i = 0; i < arr.length; i++) {
// 如果max 比后边的元素小 就是true
if (max < arr[i]) {
//将后边最大的元素赋值给 max
max = arr[i]
}
//求和
sum += arr[i]
}
console.log(`最高分:${max},平局分是${sum / arr.length},总分:${sum}`)
数组小结
目标:掌握数组,把一堆数据有序管理起来
数组是什么
- 可以按顺序保存数据的数据类型
数组的基本使用
- 主要以中括号作为符号
遍历数组
- 用for循环遍历
数组和对象的说明
- 数组也是对象
- 数组有length属性和一些方法
- 用for…in可以遍历对象
- 数组的案例
二、最终案例
1-4案例:计算[2,6,18,15,40] 中能被3整除的偶数的个数
//练习6:计算[2,6,18,15,40] 中能被3整除的偶数的个数
let arr = [2, 6, 18, 15, 40]
let count = 0
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 3 === 0 && arr[i] % 2 === 0) {
count++
}
}
document.write(count)
1-5案例:给一个数字数组,该数组中由很多数字0,将不为0的数据存入到一个新的数组中*
//练习7:给一个数字数组,该数组中由很多数字0,将不为0的数据存入到一个新的数组中
let num = [0, 12, 3, 6, 0, 7, 65, 34]
//声明一个新数组
let newArr = []
for (let j = 0; j < num.length; j++) {
if (num[j] !== 0) {
//将老数组里边不为的元素,添加到新数组里边
newArr.push(num[j])
}
}
console.log(`新的元素:${newArr}`)
三、术语解释
目标:知道一些术语,让自己更专业
术语 | 解释 | 举例 |
---|---|---|
关键字 | 在JavaScript中有特殊意义的词汇 | let、var、function、if、else、switch、case、break |
保留字 | 在目前的JavaScript中没意义,但未来可能会具有特殊意义的词汇 | int、short、long、char |
标识(标识符) | 变量名、函数名的另一种叫法 | 无 |
表达式 | 能产生值的代码,一般配合运算符出现 | 10 + 3、age >= 18 |
语句 | 一句代码也称之为一条语句,一般按用途还会分类:输出语句、声明语句、分支语句 | 无 |