JavaScript概念(五)

165 阅读1分钟

JavaScript

一、案例(星星、九九乘法表)---for循环嵌套

1.五行五列---星星

for (i=1;i<=5;i++) {
     for (i=1;i<=5;i++) {
      docunment.write('星星')
                       }
                  }

2.n行m列---星星

let n = +prompt('请输入几行星星')
let m = +prompt('请输入几列星星')
for (i=1;i<=n;i++) {
      for (i=1;i<=m;i++) {
      document.write('星星')
                        }           
                  }

3.倒三角---星星

需求分析:

1行数没有改变

2 列数 发生了变化!

​ 要知道 改变列数 代码(5) index1<= 5

1 第一次循环 列数 :1

2 第二次循环 列数 : 2

3 第三次循环 列数 : 3

4 发现 不能写死成 5 而是 换成一个变量

变量 可以实现 第一次循环 1 第二次循环 2

let let n = +prompt('请输入几行星星')
for (i=1;i<=n;i++) {
      for (i=1;i<=i;i++) {
      document.write('星星')
                        }           
                  }

4.九九乘法表

for (n=1;n<=9;ni++) {
      for (m=1;m<=n;m++) {
let sum= n*m
document.write(`<span>${m}*${n}=${sum}</span>`)
}            
                  }

二、数组

1.数组(Array)是一种可以按顺序保存数据的数据类型

2.数组的基本使用

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

(2)语法

//let 数组名 =[数据1,数据2,数据3...数据n]

//例
  let names =['小明','小刚','小红','小丽','小米']

(3)数组是按顺序保存,所以每个数据都有自己的编号,编号也叫索引或下标,数组可以存储任意类型的数据。计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推。

(4)通过下标取数据

let names =['小明','小刚','小红','小丽','小米']
names[0]  //小明
names[1]  //小刚
names[2]  //小红

(5)数组长度length

let names =['小明','小刚','小红','小丽','小米']
console.log(names[1]) //小刚
console.log(names[3]) //小丽
console.log(names.length) //5

(6)遍历输出数组里面的元素

①语法

for (let i=0;i<=数组名.length;i++) {
           数组名[i]
                               }
                               
                               
let num=[10,20,30,4,50,60]
for (let i = 0 ;i<num.length;i++) {
         document.write(num[i])
}

(7)数组求和及平均值

    <script>
      // 数组
      let arr = [2, 6, 1, 7, 4];
      // 存放总的数据
      let sum = 0;
      // 循环
      for (let index = 0; index < arr.length; index++) {
        // 使用变量 来存放数组中的每一个数值
        sum += arr[index];
        // index=0   sum += arr[index]  sum += 2;
        // index=1   sum += arr[index]  sum += 6;
      }
      console.log(sum); // 和 20
      // 平均值 =   和 / 数组的长度
      console.log(sum / arr.length);
    </script>

(8)数组最大值和最小值

需求:求数组 [2,6,1,77,52,25,7] 中的最大值 分析: ①:声明一个保存最大元素的变量 max。 ②:默认最大值可以取数组中的第一个元素。 ③:遍历这个数组,把里面每个数组元素和 max 相比较。 ④:如果这个数组元素大于max 就把这个数组元素存到 max 里面,否则继续下一轮比较。 ⑤:最后输出这个 max

    <script>
      let arr = [2, 6, 1, 77, 52, 25, 7];
      let max = arr[0];
      let min = arr[0];

      // for循环
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] > max) {
          max = arr[i];
        }

        // 如果 arr[i]   比 我的min 要小 那 min 等于你arr[i]
        if (arr[i] < min) {
          min = arr[i];
        }
      }
      console.log(max);
      console.log(min);
    </script>

3.操作数组

(1)数组本质是数据集合, 操作数据无非就是 增 删 改 查 语法:

①查:数组[下标]

②改:数组[下标] = 新值

③增:arr.push(最后)、arr.unshift(第一)

④删:arr.pop(最后)、arr.shift(第一)、arr.splice

(2)数组.push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度 (重点)

①语法

<script>
      // 定义一个数组
      let arr = ['苹果', '香蕉'];

      // 多增加一个元素
      arr.push("西瓜");

      console.log(arr);//'苹果', '香蕉','西瓜'
    </script>



<script>
      // 接收用户的4个输入 输入同学的名字,组成一个数组
      let arr = [];

      // 用户的输入来实现
      for (let index = 1; index <= 4; index++) {
        // 用户的输入
        let userName = prompt('请输入你同学的名字');
        // 把userName 设置到数组中
        arr.push(userName);
      }
      console.log(arr);
    </script>

②push过滤

<script>
      //  把数组中 大于等于10元素 存放到新的数组
      let arr1 = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
      // 存放过滤好元素的数组
      let arr2 = [];

      // 对 第一个数组 循环
      for (let index = 0; index < arr1.length; index++) {
        // 判断当前的循环的元素 和 10 直接的关系
        if (arr1[index] >= 10) {
          // 需要把当前的这个元素 添加到新数组中
          arr2.push(arr1[index]);
        }
      }
      console.log(arr2);
    </script>

(3)数组.unshift(新增的内容) 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度

①语法

arr.unshift(元素1,元素2....元素n)


let arr = ['red','green']
arr.unshift('pink')
console.log(arr)

      let arr = ['black', 'red'];

      //  push  是把新的元素 设置到 数组的末位
      // arr.push('yellow');

      // unshift 是把新的元素 设置到数组的开头
      arr.unshift("yellow");

      console.log(arr);


      /* 
      数组添加元素的总结

      1 两种元素添加元素的方式
        push  末位
        unshift 开头添加元素   

      2 在开发中    push 用得最多  , unshift 了解即可  
      
      3 有没有指定位置来添加元素   ['black', 'red']  往中间塞元素可以不可以 
        可以 splice 即可(还没有讲到 )
       */
    </script>

(4)push和unshift总结

<script>
      /* 
      1 push 和 unshift 都可以做到 给数组添加新元素
      2 这两个代码在执行的时候  还可以返回  数组的长度 (了解)
       */

      let arr = ['苹果', '西瓜'];

      //  添加新元素 == 返回 添加完新元素之后的数组长度
      let arrLength = arr.unshift('哈密瓜'); // arrLength = 数组的长度 =  3 
      console.log(arrLength);
      console.log(arr.length);

    </script>

(5)案例---获取不等于0数组元素

    <script>
      /*
      获取到一个新的数组  新的数组 大于等于10

      获取到一个新的数组  新的数组 不需要带上0
       */
      let arr = [1, 3, 4, 5, 3, 2, 4, 0, 0, 3, 22, 98];

      let newArr = [];

      for (let index = 0; index < arr.length; index++) {
        // 满足条件的就要

        // 1 满足 元素大于等于10的就要
        // if (arr[index] > 10) {
        // 新的数组 不需要带上0
        if (arr[index] !== 0) {
          newArr.push(arr[index]);
        }
      }

      console.log(newArr);
    </script>

(6)数组. pop() 方法从数组中删除最后一个元素,并返回该元素的值

①语法

arr.pop()

let arr=['red','green']
arr.pop()
console.log(arr)

    <script>
      //  数组 删除最后一个元素 pop

      let arr = ['西瓜', '香蕉', '麻瓜'];

      // 希望删除掉最后的一个元素  麻瓜 不要
      arr.pop();

      console.log(arr); // ['西瓜', '香蕉'

    </script>

(7)数组. shift() 方法从数组中删除第一个元素,并返回该元素的值

①语法

arr.shift()

let arr = ['red','green']
arr.shift()
console.log(arr)


    <script>
      //  数组 删除最后一个元素 pop

      let arr = ['西瓜', '香蕉', '麻瓜'];

      // 希望删除掉第一个元素  
      arr.shift();

      console.log(arr);// 
    </script>

(8)数组. splice() 方法 删除指定元素

arr.splice(start,deleteCount)
arr.splice(起始位置,删除及格元素)


<script>
      let arr = ['西瓜', '香蕉', '麻瓜'];
      // 现在想要删除 香蕉

      // splice("想要删除的元素的下标","想要删除几个");

      // 删除数组中的下标为1的元素,
      // 从 1 的位置开始 想要删除几个
      // arr.splice(1, 2);
      //
      // console.log(arr);

      //  指定位置来插入元素
      // splice("想要删除的元素的下标","想要删除几个","在该下标位置添加元素");

      // 在 1的位置,删除0个元素,增加一个红薯
      // let arr = ['西瓜', '香蕉', '麻瓜'];
      // ['西瓜', '红薯', '香蕉', '麻瓜'];
      arr.splice(1, 1, '红薯');
      console.log(arr);
    </script>

(9)数组总结

    <script>
      // 指定哪个删除  可以 只是还没有讲到  splice
      // 假如是删除了最后一个后,length的长度会从3个变成2吗? 会
      // 这种删除  和直接删了代码有什么区别
      // 数组是我们自己手写的  自己手动删除 不就可以了吗 !!
      // shift和pop 在执行删除的时候  会返回被删除的元素 (理解成从一个鸡蛋篮子里面取鸡蛋)
      // 1 篮子里面的鸡蛋个数减少
      // 2 获取到那个取出来对应的鸡蛋

      // 有默契,  我讲解知识,先讲解最基本使用   大家基本使用都没有问题,
      // 愿意补充和拓展

      // 这个数组 是动态生成的
      // let arr = [];
      // for (let index = 0; index < 4; index++) {
      //   arr.push(prompt('请输入你的分数'));
      // }

      // // 去掉第一0个分数
      // arr.shift();
      // // 去掉最后一个分数
      // arr.pop();

      // console.log(arr);

      /* 
      4种方式  操作数组
      2种增加
      push   末位 增加
      unshift  开头 增加
      2种删除
      pop 末位删除
      shift 开头删除 
       */

      let arr = ['西瓜', '香蕉', '麻瓜'];
      // let first = arr.shift(); // first = 西瓜  arr = 香蕉 麻瓜
      // console.log(first);
      // console.log(arr);

      let last = arr.pop();
      // last =  麻瓜
      // arr =  西瓜 香蕉
      console.log(last);
      console.log(arr);
    </script>

4.案例---动态生成柱状图

需求分析:(用文字 把看见的需求 描述下来)

1 一打开页面 弹出了4个 输入框

2 用户在每一个输入框 填写数字

3 最后一个输入框填写完毕了 页面上出现 4个div

4 4个div的样式部分

​ 1 一行放4个元素

​ 2 每一个元素颜色相同 高度不同

5 操作

​ 1 第4个步骤 我最熟悉了 写布局 css

(1)动态生成柱状图---静态结构

 <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      ul {
        list-style: none;
        width: 1000px;
        height: 600px;
        margin: 100px auto;
        display: flex;
        justify-content: space-around;
        background-color: aqua;

        /* 设置侧轴的对齐方式 下对齐 */
        align-items: flex-end;
      }
      li {
        width: 100px;
        background-color: pink;
        position: relative;
      }
      span {
        position: absolute;
        top: -30px;
        left: 50%;
        transform: translateX(-50%);
      }
      div {
        position: absolute;
        width: 100%;
        text-align: center;
        /* 相对于父元素的高 */
        top: 100%;
        background-color: red;
      }
      li:nth-child(1) {
        height: 100px;
      }
      li:nth-child(2) {
        height: 200px;
      }
      li:nth-child(3) {
        height: 300px;
      }
      li:nth-child(4) {
        height: 400px;
      }
    </style>
  </head>
  <body>
    <ul>
      <li>
        <span>1</span>
        <div>第1季度</div>
      </li>
      <li> <span>2</span> <div>第2季度</div> </li>
      <li>
        <span>3</span>
        <div>第3季度</div>
      </li>
      <li>
        <span>4</span>
        <div>第4季度</div>
      </li>
    </ul>

(2)动态生成柱状图---循环生成4个

    <script>
      /*

      需求分析:(用文字 把看见的需求 描述下来)
      1 一打开页面 弹出了4个 输入框
      2 用户在每一个输入框 填写数字-控制的是每一个li标签的高度
      3 最后一个输入框填写完毕了 页面上出现 4个div
      4 4个div的样式部分
        1 一行放4个元素
        2 每一个元素颜色相同 高度不同

      5 操作
        1 第4个步骤 我最熟悉了  写布局 css   已经完成了!!
        2 先实现 for循环生成4个柱子li(类似之前写过的一个 动态生成table表格)(每一个柱子的高不一样 先不管)
      */

      // 用来存放4个li标签的 字符串 原来 ul 不需要 循环 只是 li标签要循环
      let liHtml = `<ul>`;

      for (let index = 1; index <= 3; index++) {
        liHtml += `<li> <span>${index}</span> <div>第${index}季度</div> </li>`;
      }

      liHtml += `</ul>`;

      // liHTML =    `<ul></ul>`

      // 把4个li标签 写到页面上
      document.write(liHtml);
    </script>

(3)动态生成柱状图---生成li标签

    <script>
      /* 
      重复就是最好帮我理解代码的  解决方法

      能不能由用户的的输入来决定 生成几个li标签 
      
       */

      let num = +prompt('请输入你想要生成的li标签的个数');

      let liHtml = `<ul>`;
      for (let index = 1; index <= num; index++) {
        liHtml += `<li>${index}</li>`;
      }
      liHtml += `</ul>`;

      document.write(liHtml);
    </script>

(4)动态生成柱状图---获取用户输入的高度

<script>
      /*

      需求分析:(用文字 把看见的需求 描述下来)
      1 一打开页面 弹出了4个 输入框
      2 用户在每一个输入框 填写数字-控制的是每一个li标签的高度
      3 最后一个输入框填写完毕了 页面上出现 4个div
      4 4个div的样式部分
        1 一行放4个元素
        2 每一个元素颜色相同 高度不同

      5 操作
        1 第4个步骤 我最熟悉了  写布局 css   已经完成了!!
        2 先实现 for循环生成4个柱子li(类似之前写过的一个 动态生成table表格)(每一个柱子的高不一样 先不管)
        3 动态获取用户输入的高度
        4 还需把这些高度按个设置到 对应的li标签中   
          先实现4功能 写css 3个方式 (内部、外部样式、行内)

      */

      // 用来存放4个li标签的 字符串 原来 ul 不需要 循环 只是 li标签要循环
      let liHtml = `<ul>`;

      // 4个li标签的高度
      let liHeight = [100, 150, 200, 250];

      // 数组是4个  长度就是4   0-3 4个元素
      for (let index = 0; index < 4; index++) {
        //  liHeight[0] = 100
        //  liHeight[1] = 150
        //  liHeight[2] = 200
        //  liHeight[3] = 250

        // let h = liHeight[index];
        // liHtml += `<li style="height:50px;"> <span>${index}</span> <div>第${index}季度</div> </li>`;
        // liHtml += `<li style="height:${50}px;"> <span>${index}</span> <div>第${index}季度</div> </li>`;
        // liHtml += `<li style="height:${h}px;"> <span>${index}</span> <div>第${index}季度</div> </li>`;
        liHtml += `<li style="height:${liHeight[index]}px;"> <span>${index}</span> <div>第${index}季度</div> </li>`;
      }

      liHtml += `</ul>`;

      // liHTML =    `<ul></ul>`

      // 把4个li标签 写到页面上
      document.write(liHtml);

(5)动态生成柱状图---完成

    <script>
      /*
      动态获取用户输入的高度 ,然后把高度都设置到一个数组即可 
      1 弹出4个窗口,让用户输入数据  
     
      */

      let liHtml = `<ul>`;
      let liHeight = [];

      // for循环来弹出4个窗口 获取内容
      for (let index = 0; index < 4; index++) {
        // 弹窗获取用户的输入的高度
        let height = +prompt(`请输入你想要的第${index + 1}个高度数据`);

        // 把数据 添加到数组中
        liHeight.push(height);
      }

      for (let index = 0; index < 4; index++) {
        liHtml += `
        <li style="height:${liHeight[index]}px;"> 
          <span>${liHeight[index]}</span>
           <div>第${index + 1}季度</div>
            </li>`;
      }
      liHtml += `</ul>`;
      document.write(liHtml);
    </script>

5.数组补充

<script>
      /* 
      1 获取数组的最后一个元素 arr[arr.length - 1]  常用的规则!! 

      2 新增或者修改数组元素 
        arr[10]='南瓜'   
        1 如果 10这个位置已经有元素 那么 就是修改
        2 如果 10这个位置没有元素  添加就可以了  最终数组的度变成 10+1  

      3 数组 可以存放任意类型的数据   可以这么做,但是不建议 我们建议 一个数组内的数据类型要统一!! 
        let arr = ['西瓜', 100, null, true, NaN, undefined, 80];

      4 数组快速清空或者删除元素的方式 
        arr.length = 0 
       */

      // let arr = ['西瓜', '香蕉', '麻瓜','香瓜','苦瓜','傻瓜'];
      // // let arr = ['西瓜', '香蕉', '麻瓜'];
      // // 获取数组中最后的一个元素
      // // arr.length - 1
      // console.log(arr[arr.length - 1]);

      // let arr = ['西瓜', '香蕉', '麻瓜'];

      // 想要把香蕉修改成葡萄
      // arr[1] = '葡萄'; // 修改

      // console.log( arr[3] );// 输出什么 undefined

      // 添加元素
      // arr[3] = '南瓜';
      // console.log(arr);

      // arr[10] = '南瓜';
      // console.log(arr[8]);

      // 存放其他类型 数据
      // let arr = ['西瓜', 100, null, true, NaN, undefined, 80];

      let arr = ["西瓜", 100, null, true, NaN, undefined, 80];

      // 把数组 清空掉!!  不想要里面的元素了!!
      // arr = [];

      // 保留 3个元素 其他不要了
      // arr.length = 3;
      arr.length = 0;

      console.log(arr);
    </script>