小言_互联网的博客

循环、函数、对象——js基础练习

465人阅读  评论(0)

目录

一、循环练习

1.1 取款机案例

1.2 九九乘法表

1.3 根据数据生成柱形图

1.4 冒泡排序

1.6综合大练习

二、函数

2.1 转换时间案例

三、对象

1. 遍历数组对象

2. 猜数字游戏

3. 生成随机颜色

 4. 学成在线页面渲染案例

一、循环练习

1.1 取款机案例


  
  1. // 准备一个总的金额
  2. let sum = 1000
  3. while ( true) {
  4. let op = +prompt ( `
  5. 请选择您的操作:
  6. 1.取款
  7. 2.存款
  8. 3.查看余额
  9. 4.退出
  10. `)
  11. // 如果用户输入的 4,则退出循环,break
  12. if (op === 4) {
  13. break
  14. }
  15. // 根据输入做操作
  16. switch (op) {
  17. case 1:
  18. let qu = + prompt( '取款')
  19. sum = sum - qu
  20. break
  21. case 2:
  22. let cun = + prompt( '存款')
  23. sum = sum + cun
  24. break
  25. case 3:
  26. alert( `您的余额是${sum}`)
  27. break
  28. }
  29. }

1.2 九九乘法表


  
  1. <style>
  2. span{
  3. display: inline-block;
  4. height: 25px;
  5. line-height: 25px;
  6. width: 100px;
  7. padding: 5px 10px;
  8. /* text-align: left; */
  9. border: 1px solid #000;
  10. margin: 2px;
  11. border-radius: 5px;
  12. box-shadow: 2px 2px 2px rgba( 255, 192, 203, . 4);
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <script>
  18. for ( let i = 1; i <= 9; i++) {
  19. for( let j = 1; j <= i; j++){
  20. document. write( `<span>${j} * ${i} = ${i * j}</span>`)
  21. }
  22. // 进行换行显示
  23. document. write( '<br>')
  24. }
  25. </script>

1.3 根据数据生成柱形图

结构样式创建如下代码:

        使用一个box 盒子,设置左及下边框,然后添加四个子元素,每个元素包含span和h4,使用flex布局使得div在box中沿x轴平分剩余空间,y轴与底部对齐排列,然后也为div设置flex布局,使得,span和h4分散在div两端。


  
  1. <style>
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. }
  6. .box {
  7. display: flex;
  8. width: 700px;
  9. height: 300px;
  10. border-left: 1px solid pink;
  11. border-bottom: 1px solid pink;
  12. margin: 50px auto;
  13. justify-content: space-around;
  14. align-items: flex-end;
  15. text-align: center;
  16. }
  17. .box> div {
  18. display: flex;
  19. width: 50px;
  20. background-color: pink;
  21. flex-direction: column;
  22. justify-content: space-between;
  23. }
  24. .box div span {
  25. margin-top: - 20px;
  26. }
  27. .box div h4 {
  28. margin-bottom: - 35px;
  29. width: 70px;
  30. margin-left: - 10px;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <div class="box">
  36. <div style="height: 123px;">
  37. <span>123 </span>
  38. <h4>第1季度 </h4>
  39. </div>
  40. <div style="height: 156px;">
  41. <span>156 </span>
  42. <h4>第2季度 </h4>
  43. </div>
  44. <div style="height: 120px;">
  45. <span>120 </span>
  46. <h4>第3季度 </h4>
  47. </div>
  48. <div style="height: 210px;">
  49. <span>210 </span>
  50. <h4>第4季度 </h4>
  51. </div>
  52. </div>

 

最终代码:


  
  1. <style>
  2. * {
  3. padding: 0;
  4. margin: 0;
  5. }
  6. .box {
  7. display: flex;
  8. width: 700px;
  9. height: 300px;
  10. border-left: 1px solid pink;
  11. border-bottom: 1px solid pink;
  12. flex-direction: row;
  13. justify-content: space-around;
  14. align-items: flex-end;
  15. text-align: center;
  16. }
  17. .box > div {
  18. display: flex;
  19. width: 50px;
  20. background-color: pink;
  21. flex-direction: column;
  22. justify-content: space-between;
  23. }
  24. .box div span {
  25. margin-top: - 20px;
  26. }
  27. .box div h4 {
  28. width: 70px;
  29. margin-bottom: - 35px;
  30. margin-left: - 10px;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <script>
  36. let arr = []
  37. // 1.四次弹窗效果
  38. for ( let i = 1; i <= 4; i++) {
  39. arr. push( prompt( `请输入第${i}季度的数据`))
  40. }
  41. // 盒子开头
  42. document. write( `<div class="box">`)
  43. // 盒子中间 利用循环的形式 跟数组有关系
  44. for ( let i = 0; i < arr. length; i++) {
  45. document. write( `
  46. <div style="height: ${arr[i]}px;">
  47. <span>${arr[i]}</span>
  48. <h4>第${i + 1}季度</h4>
  49. </div>
  50. `)
  51. }
  52. // 盒子结尾
  53. document. write( `</div>`)
  54. </script>
  55. </body>

1.4 冒泡排序


  
  1. // 转为升序排列
  2. let arr = [ 5, 4, 3, 2, 1]
  3. for ( let i = 0; i < arr. length - 1; i++) {
  4. for ( let j = 0; j < arr. length - i - 1; j++) {
  5. // 开始交换,前提是前一个数大于后一个数才交换
  6. if (arr[j] > arr[j + 1]) {
  7. // 交换两个变量
  8. let temp = arr[j]
  9. arr[j] = arr[j + 1]
  10. arr[j + 1] = temp
  11. }
  12. }
  13. }
  14. console. log(arr);

1.5 找到数组中某个元素的下标,没有就打印-1

找出数组中 元素为10的下标,有则打印该下标,没有则打印-1

注意,可以设置储存结果的变量值为-1,有该元素时该变量值变为该元素的下标


  
  1. arr = [ 88, 20, 30, 100, 50]
  2. let re = - 1 //用于储存结果,默认没有
  3. for ( let i = 0; i < arr. length; i++) {
  4. if (arr[i] === 10) {
  5. re = i //如果找到就把当前索引号赋值给re, 如果没有找到,则默认是-1
  6. break //找到就退出
  7. }
  8. }
  9. console. log(re);

1.6综合大练习

注意因为无效不放入数组,故可以根据数组的长度来判断循环终止条件 


  
  1. // 定义空数组
  2. let arr = []
  3. while (arr. length < 5) {
  4. // 输入年龄
  5. let age = + prompt( '输入第${arr.length + 1}个有效年龄(0-100)')
  6. // 判断是否有效
  7. if (age >= 0 && age <= 100) {
  8. // 添加到数组中
  9. arr. push(age)
  10. }
  11. }
  12. console. log(arr);
  13. let total = 0
  14. let max = arr[ 0]
  15. let min = arr[ 0]
  16. for ( let i = 0; i < arr. length; i++) {
  17. if (arr[i] >= 18) {
  18. console. log( `成年人的年龄有${arr[i]}`);
  19. }
  20. arr [i] > max ? max = arr[i] : max
  21. arr [i] < min ? min = arr[i] : min
  22. total += arr[i]
  23. }
  24. let ave = total / arr. length
  25. console. log( `总年龄为${total},平均年龄为${ave}`);
  26. console. log( `最大值为${max},最小值为${min}`);

二、函数

2.1 转换时间案例


  
  1. //用户输入
  2. let second = + prompt( '请输入秒数')
  3. // 封装函数
  4. function getTime( t) {
  5. // 转换
  6. let hour = parseInt(t / 60 / 60 % 24)
  7. let minu = parseInt(t / 60 % 60)
  8. let sec = parseInt(t % 60)
  9. // 补0
  10. hour = hour < 10 ? '0' + hour : hour
  11. minu = minu < 10 ? '0' + minu : minu
  12. sec = sec < 10 ? '0' + sec : sec
  13. return `转换之后为${hour}小时${minu}分钟${sec}秒`
  14. // console.log(`${t}转换为${hour}小时${minu}分${sec}秒`);
  15. }
  16. let str = getTime(second)
  17. console. log(str);

三、对象

1. 遍历数组对象

 

 表格结构及样式代码:


  
  1. <style>
  2. table {
  3. width: 600px;
  4. text-align: center;
  5. border-collapse: collapse;
  6. }
  7. table,
  8. th,
  9. td {
  10. border: 1px solid #ccc;
  11. }
  12. caption {
  13. font-size: 18px;
  14. margin-bottom: 10px;
  15. font-weight: 700;
  16. }
  17. table tr {
  18. height: 40px;
  19. cursor: pointer;
  20. }
  21. table tr :first-child {
  22. background-color: #ddd;
  23. }
  24. table tr :not( :first-child) :hover {
  25. background-color: #eee;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <h2>学生信息 </h2>
  31. <p>将数据渲染到页面中... </p>
  32. <table>
  33. <caption>学生列表 </caption>
  34. <tr>
  35. <th>序号 </th>
  36. <th>姓名 </th>
  37. <th>年龄 </th>
  38. <th>性别 </th>
  39. <th>家乡 </th>
  40. </tr>
  41. <tr>
  42. <td>1 </td>
  43. <td>小明 </td>
  44. <td>18 </td>
  45. <td></td>
  46. <td>河北省 </td>
  47. </tr>
  48. <tr>
  49. <td>1 </td>
  50. <td>小明 </td>
  51. <td>18 </td>
  52. <td></td>
  53. <td>河北省 </td>
  54. </tr>
  55. <tr>
  56. <td>1 </td>
  57. <td>小明 </td>
  58. <td>18 </td>
  59. <td></td>
  60. <td>河北省 </td>
  61. </tr>
  62. </table>

最终渲染的 js 代码:


  
  1. <body>
  2. <h2>学生信息 </h2>
  3. <p>将数据渲染到页面中... </p>
  4. <table>
  5. <caption>学生列表 </caption>
  6. <tr>
  7. <th>序号 </th>
  8. <th>姓名 </th>
  9. <th>年龄 </th>
  10. <th>性别 </th>
  11. <th>家乡 </th>
  12. </tr>
  13. <!-- script写到这里 -->
  14. <script>
  15. // 数据准备
  16. let students = [
  17. { name: '小明', age: 18, gender: '男', hometown: '河北省'},
  18. { name: '小红', age: 19, gender: '女', hometown: '河南省'},
  19. { name: '小刚', age: 17, gender: '男', hometown: '山西省'},
  20. { name: '小丽', age: 18, gender: '女', hometown: '山东省'}
  21. ]
  22. // 渲染页面
  23. for ( let i = 0; i < students. length; i++) {
  24. document. write( `<tr>`)
  25. document. write( `<td>${i + 1}</td>`)
  26. for ( let k in students[i]) {
  27. document. write( `<td>${students[i][k]}</td>`);
  28. }
  29. document. write( `</tr>`)
  30. }
  31. // 表格结尾
  32. document. write( `</table>`)
  33. </script>

2. 猜数字游戏

需求:程序随机生成1 ~ 10 之间的一个数字,用户输入一个数字

 (1). 如果大于该数字,就提示,数字猜大了,继续猜

 (2). 如果小于该数字,就提示,数字猜小了,继续猜

 (3). 如果猜对了,就提示,猜对了,程序结束


  
  1. // 随机生成一个数字1 ~ 10
  2. function getRandom (N, M) {
  3. return Math. floor( Math. random() * (M - N + 1) + N)
  4. }
  5. let random = getRandom( 1, 10)
  6. // 需要不断
  7. while ( true) {
  8. // 用户输入一个值
  9. let num = + prompt( '请输入你猜的数字')
  10. // 判断输出
  11. if (num > random) {
  12. alert( '数字猜大了')
  13. } else if (num < random) {
  14. alert( '数字猜小了')
  15. } else if (num === random) {
  16. alert( '猜对了')
  17. break
  18. }
  19. }

设定指定次数的若未猜对时,也退出循环,且弹出次数已经用完。


  
  1. function getRandom (N, M) {
  2. return Math. floor( Math. random() * (M - N + 1) + N)
  3. }
  4. let random = getRandom( 1, 10)
  5. let flag = true //开关变量
  6. // 设定三次,三次没猜对就直接退出循环
  7. for ( let i = 1; i <= 3; i++) {
  8. // 用户输入一个值
  9. let num = + prompt( '请输入你猜的数字')
  10. // 判断输出
  11. if (num > random) {
  12. alert( '数字猜大了')
  13. } else if (num < random) {
  14. alert( '数字猜小了')
  15. } else if (num === random) {
  16. flag = false
  17. alert( '猜对了')
  18. break //退出循环
  19. }
  20. }
  21. if (flag) {
  22. alert( '次数已经用完了')
  23. }

3. 生成随机颜色


  
  1. // 自定义随机颜色函数
  2. function getRandomColor( flag = true) {
  3. if (flag) {
  4. // 如果为 true 则返回#ffffff
  5. let arr = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
  6. let color = '#'
  7. // 利用 for循环随机抽6次,累加到color里面
  8. for ( let i = 0; i < 6; i++) {
  9. // 每次要随机从数组里面抽取一个
  10. let random = Math. floor( Math. random() * arr. length)
  11. color += arr[random]
  12. }
  13. return color
  14. } else {
  15. // 否则是false ,则返回rgb(0,0,0)
  16. let r = Math. floor( Math. random() * 256)
  17. let g = Math. floor( Math. random() * 256)
  18. let b = Math. floor( Math. random() * 256)
  19. return `rgb(${r}, ${g}, ${b})`
  20. }
  21. }
  22. // 调用函数 getRandomColor(布尔值)
  23. console. log( getRandomColor( false))
  24. console. log( getRandomColor())
  25. console. log( getRandomColor( true))

 4. 学成在线页面渲染案例

标题标签有自己的padding,margin,故css初始化是非常必要的(* { padding: 0; margin: 0;})

注意在渲染时,图片路径src="images/course01.jpg"改为src=${data[i].src} 不需要加引号,因为data[i].src数据中包含了引号,但图片提示文字title 需要用双引号包起来 title="${data[i].title}",不包的话,只会显示该对象属性中空格前的内容,因为该属性内容可能包含空格


  
  1. <link rel="stylesheet" href="./css/style.css">
  2. </head>
  3. <body>
  4. <!-- 4. box核心内容区域开始 -->
  5. <div class="box w">
  6. <div class="box-hd">
  7. <h3>精品推荐 </h3>
  8. <a href="#">查看全部 </a>
  9. </div>
  10. <div class="box-bd">
  11. <ul class="clearfix">
  12. <!-- <li>
  13. <a href="#">
  14. <img src="images/course01.jpg" alt="">
  15. <h4>
  16. Think PHP 5.0 博客系统实战项目演练
  17. </h4>
  18. <div class="info">
  19. <span>高级</span> • <span>1125</span>人在学习
  20. </div>
  21. </a>
  22. </li> -->
  23. <script>
  24. // 数据
  25. let data = [
  26. {
  27. src: 'images/course01.jpg',
  28. title: 'Think PHP 5.0 博客系统实战项目演练',
  29. num: 1125
  30. },
  31. {
  32. src: 'images/course02.jpg',
  33. title: 'Android 网络动态图片加载实战',
  34. num: 357
  35. },
  36. {
  37. src: 'images/course03.jpg',
  38. title: 'Angular2 大前端商城实战项目演练',
  39. num: 22250
  40. },
  41. {
  42. src: 'images/course04.jpg',
  43. title: 'Android APP 实战项目演练',
  44. num: 389
  45. },
  46. {
  47. src: 'images/course05.jpg',
  48. title: 'UGUI 源码深度分析案例',
  49. num: 124
  50. },
  51. {
  52. src: 'images/course06.jpg',
  53. title: 'Kami2首页界面切换效果实战演练',
  54. num: 432
  55. },
  56. {
  57. src: 'images/course07.jpg',
  58. title: 'UNITY 从入门到精通实战案例',
  59. num: 888
  60. },
  61. {
  62. src: 'images/course08.jpg',
  63. title: 'Cocos 深度学习你不会错过的实战',
  64. num: 590
  65. },
  66. ]
  67. for ( let i = 0; i < data. length; i++) {
  68. document. write( `
  69. <li>
  70. <a href="#">
  71. <img src=${data[i].src} alt="" title="${data[i].title}">
  72. <h4>
  73. ${data[i].title}
  74. </h4>
  75. <div class="info">
  76. <span>高级</span> • <span>${data[i].num}</span>人在学习
  77. </div>
  78. </a>
  79. </li>`)
  80. }
  81. </script>
  82. </ul>
  83. </div>
  84. </div>
  85. </body>


转载:https://blog.csdn.net/weixin_70320000/article/details/129112164
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场