变量作用域的问题:

  1. 循环次数已经的时候 for循环比较方便
  2. 循环次数未知的使用while,或者 do…….while更方便

4.2-day5-js数组

一、数组

目标:掌握数组,把一堆数据有序管理起来

学习路径:

  1. 数组是什么
  2. 数组的基本使用
  3. 遍历数组
  4. 数组和对象的说明
  5. 数组方法

1.1 数组是什么

目标:能说出数组是什么

  • 数组(Array)是一种可以按顺序保存数据的数据类型
  • 为什么要数组?

    • 思考:如果我想保存一个班里5个人的姓名怎么办?
    • 如果有多个数据可以用数组保存起来
  1. <script>
  2. //数组(Array)是一组有序的数据的集合,数组里边看可以保存任意的数据类型
  3. //数组管理数据用编号来管理,下标(索引)
  4. //声明数组 let 数组名={数据1,数据2,......,数据n}
  5. //索引(下标) 0 1 2 3
  6. let names = ['小蜜瓜', '小米', '小白', '小黑']
  7. //读取数组中的元素,数组明[下标]
  8. document.write(names[0])
  9. document.write(names[3])
  10. </script>

1.2 数组的基本使用

目标:能够声明数组并且能够获取里面的数据

  1. 声明语法

    1. let 数组名 =[数组1,数组2,…….,数据n ]
    • let names = [‘小明’,’小刚’,’小红’,‘小路’,‘小米’ ]
    • 数组是按顺序保存,所以每个数据都有自己的编号
    • 计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推
    • 在数组中,数据的编号也叫索引或下标
    • 数组可以存储任意类型的数据
  1. 案例:
  2. //定义一个数组,里边存放星期一 —— 星期日,在控制打印星期日
  3. let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
  4. let day = week[6]
  5. console.log(day)

4.一些特点:

  • 数组声明完了后,也可以通过下标动态添加数组元素
  1. <script>
  2. let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
  3. //数组明.length 数组的长度(数组里边元素的个数)
  4. //console.log(week.length);
  5. //动态的添加数组元素, 数组名[索引值] = 值
  6. week[7] = '小徒弟'
  7. //相同的索引,回覆盖掉
  8. // week[3] = '西红柿'
  9. console.log(week)
  10. console.log(week.length);
  11. </script>

1.3遍历数组

目标:能够遍历输出数组里面的元素

  1. 遍历数组:

    • 用循环把数组中每个元素都访问到,一般会用for循环遍历

      1. for(let i = 0; i<数组名.lenght;i++ ){
      2. 数组名[i]
      3. }
  1. 遍历数组:
  2. //数组遍历 就是将数组中的每个元素读取出来,for循环数组遍历
  3. let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日', '哈哈哈', '到达']
  4. console.log(week.length);
  5. //数组长度永远比最大的索引值大1
  6. for (let i = 0; i <= week.length; i++) {
  7. console.log(week[i]);
  8. }

课堂案例:

  1. //案例:求数组所有元素的和,把数组里边的每一个元素累加到sum里面
  2. let arr = [2, 6, 1, 7, 4]
  3. //1.声明一个求和的变量 sum
  4. let sum = 0
  5. //2.循环遍历数组,把数组里边的
  6. for (let i = 0; i <= arr.length; i++) {
  7. // sum =sum+arr[i]
  8. sum += arr[i]
  9. }
  10. document.write(`数组的和:${sum}<br>`)
  11. //3.用求和的结果sum/数组元素个数(arr.length)
  12. document.write(sum / arr.length)
  13. --------------------------------------------------------------------------
  14. 用函数就行封装:
  15. //求数组所有元素的和,以及平均值
  16. //1.实参和形参 2.功能
  17. //形参接受的数组
  18. function getSum(arr) {
  19. let sum = 0
  20. for (let i = 0; i < arr.length; i++) {
  21. sum += arr[i]
  22. }
  23. let avg = sum / arr.length
  24. //返回值是一个数组
  25. return [sum, avg]
  26. }
  27. let res = getSum(num)
  28. console.log(res);
  29. //打印输出
  30. let res1 = getSum(num1)
  31. document.write(res1)

1.4 数组和对象的说明

目标:能够遍历输出对象里面的元素

  1. 数组也属于对象类型

    • 数组返回的数据类型是 object

    • 对象也可以通过 [ ] 访问属性值

    • 对象也可以被遍历

      1. //数据也属于对象类型 object
      2. let arr = [1, 2, 3]
      3. //对象由属性和方法组成
      4. let obj = {
      5. //键值对 一对数据,通过不同的方式连在一起
      6. //键名 值
      7. //key value
      8. uname: '王浩',
      9. age: '21'
      10. }
  1. 遍历对象

    • 一般不用这种方式遍历数组、主要是用来遍历对象
    • 一定记住: k 是获得对象的属性名对象名[k] 是获得 属性值
      1. //遍历对象 访问对象的每一个属性(属性值)
      2. for (let key in obj) {
      3. //获取属性
      4. console.lof(key);
      5. // 获取属性值 对象名[key] 注意key不要加引号
      6. console.log(obj[key]);
      7. }
      8. //访问对象的属性
      9. console.log(obj.uname);
      10. console.log(obj['age'])

1-1随机点名案例:
  1. <script>
  2. //随机点名
  3. //1.声明数组
  4. let arr = ['毛毛', '大猫', '二狗子', '三毛', '小李子', '李富贵', '大黄', '悟空']
  5. // 核心需求 就是将索引值 变成随机整数
  6. // 生成[0,1]的随机数, 需求[0,8]的随机数
  7. let i = Math.floor(Math.random() * arr.length)
  8. document.write(arr[i])
  9. </script>

1-2遍历数据:
  1. let students = [
  2. { name: '小红',age: 18,sex: '女',hometown: '河北'},
  3. { name: '小绿',age: 22,sex: '男', hometown: '河南'},
  4. {name: '小青',age: 220,sex: '女',hometown: '峨眉山' },
  5. {name: '素贞', age: 520,sex: '女',hometown: '青城山'}]
  6. for (let i = 0; i <= students.length; i++) {
  7. //students[i] 获取数组中每一个对象元素, students[i].name 获取对象中name的属性
  8. console.log(students[i].name)
  9. }

1.5 数组方法

目标:能使用数组方法对数组进行添加删除元素操作

数组做为对象数据类型,不但有 length 属性可以使用,还提供了许多方法

  1. push() 动态向数组的尾部添加一个单元
  2. unshift() 动态向数组头部添加一个单元
  3. pop() 删除最后一个单元
  4. shift() 删除第一个单元
  5. splice() 动态删除任意单元

    • splice(从那里位置开始删,删除多少个)
  1. let arr = ['好好', '信息', '加啊', '小宝', '撒娇大']
  2. console.log(arr);
  3. // 数组名 .push(数据) 动态的向数组的末尾添加元素
  4. arr.push('阿瑟将军艾森')
  5. // 数组名 .unshift(数据) 动态的向数组的头部添加元素
  6. arr.unshift('小牙印')
  7. // 数组名.(数据) 删除数组的最后一个元素
  8. arr.pop()
  9. // 数组名 .() 删除数组的第一个元素
  10. arr.shift()
  11. console.log(arr);
  12. // 数组名 .splice(索引值,删除的个数) 从索引值的元素开始删除
  13. arr.splice(1, 2)

1-3案例-求数组成绩的最高分
  1. //求最高分 和 平均分
  2. let arr = [15, 87, 179, 94, 90, 200, 30]
  3. // 假设第1个元素是最大值
  4. let max = arr[0]
  5. let sum = 0
  6. for (let i = 0; i < arr.length; i++) {
  7. // 如果max 比后边的元素小 就是true
  8. if (max < arr[i]) {
  9. //将后边最大的元素赋值给 max
  10. max = arr[i]
  11. }
  12. //求和
  13. sum += arr[i]
  14. }
  15. console.log(`最高分:${max},平局分是${sum / arr.length},总分:${sum}`)

数组小结

目标:掌握数组,把一堆数据有序管理起来

  1. 数组是什么

    • 可以按顺序保存数据的数据类型
  2. 数组的基本使用

    • 主要以中括号作为符号
  3. 遍历数组

    • 用for循环遍历
  4. 数组和对象的说明

    • 数组也是对象
    • 数组有length属性和一些方法
    • 用for…in可以遍历对象
  5. 数组的案例

二、最终案例

1-4案例:计算[2,6,18,15,40] 中能被3整除的偶数的个数

  1. //练习6:计算[2,6,18,15,40] 中能被3整除的偶数的个数
  2. let arr = [2, 6, 18, 15, 40]
  3. let count = 0
  4. for (let i = 0; i < arr.length; i++) {
  5. if (arr[i] % 3 === 0 && arr[i] % 2 === 0) {
  6. count++
  7. }
  8. }
  9. document.write(count)

1-5案例:给一个数字数组,该数组中由很多数字0,将不为0的数据存入到一个新的数组中*

  1. //练习7:给一个数字数组,该数组中由很多数字0,将不为0的数据存入到一个新的数组中
  2. let num = [0, 12, 3, 6, 0, 7, 65, 34]
  3. //声明一个新数组
  4. let newArr = []
  5. for (let j = 0; j < num.length; j++) {
  6. if (num[j] !== 0) {
  7. //将老数组里边不为的元素,添加到新数组里边
  8. newArr.push(num[j])
  9. }
  10. }
  11. console.log(`新的元素:${newArr}`)

三、术语解释

目标:知道一些术语,让自己更专业

术语 解释 举例
关键字 在JavaScript中有特殊意义的词汇 let、var、function、if、else、switch、case、break
保留字 在目前的JavaScript中没意义,但未来可能会具有特殊意义的词汇 int、short、long、char
标识(标识符) 变量名、函数名的另一种叫法
表达式 能产生值的代码,一般配合运算符出现 10 + 3、age >= 18
语句 一句代码也称之为一条语句,一般按用途还会分类:输出语句、声明语句、分支语句