JavaScript : for循环、数组

153 阅读1分钟

for循环

语法

image.png

  • 跟while一样也是执行重复代码
  • 好处 把声明起始值 循环条件 变化值写到一起 一目了然 while循环
        let i = 1
        while (i<=10) {
            document.write(i)
            document.write('<br>')
            i++
        }

for循环

	for (let i = 0; i < 10; i++) {
            document.write(i)
            document.write('<br>')        
        }
    1. 当如果明确了循环的次数的时候推荐使用for循环
    1. 当不明确循环的次数的时候推荐使用while循环

for案例

        // 1. 利用for循环输出1~100岁
        for (let i = 0; i <= 100; i++) {
            console.log(`${i}岁`);
        }

        // 2. 求1-100之间所有的偶数和
        let sum = 0
        for (let i = 0; i < 100; i++) {
            if (i % 2 === 0) {
                sum += i
            }
        }
        console.log(sum);

        // 3. 页面中打印4个小❤
        // let str = '☆'
        let str = '❤'
        for (let i = 0; i < 4; i++) {
            document.write(str)
        }

        // 4. 请将 数组['马超', '赵云', '张飞', '关羽', '黄忠']依次打印出来
        array = ['马超', '赵云', '张飞', '关羽', '黄忠']
        for (let i = 0; i < array.length; i++) {
            console.log(array[i]);
        }

退出循环

    1. continue:结束本次循环,继续下次循环
    1. break:跳出所在的循环
 <script>
        // 假设你在餐馆吃饭  
        let arr = ['虾饺', '蒸排骨', '虫子', '红米肠', '糯米鸡']
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] == '虫子') {
                console.log('口区,吃到了虫子耶,我吃不下了');
                // 退出循环!

                // continue
                break
            }
            console.log('我成功的吃了' + arr[i]);
        }
   </script>

循环嵌套

image.png

一个循环里再套一个循环,一般用在for循环里

  • 循环嵌套案例 1
 <script>
        // 记忆单词案例
        // 分析
        // 1. 外面的循环 记录第n天
        // 2. 内层的循环 记录每天记忆的单词
        for (let i = 0; i < 3; i++) {
            console.log(`今天是第${i + 1}天`);
            for (let j = 0; j < 5; j++) {
                console.log(`我记住了今天第${j + 1}个单词`);
            }
            console.log('\n');
        }
    </script>
  • 循环嵌套案例2: 打印 ★ ★

<script>
        // 用户输入对应的行数和列数 打印对应的星星★
        let row = +prompt('请输入行数')
        let column = +prompt('请输入列数')
        for (let i = 0; i < row; i++) {
            for (let j = 0; j < column; j++) {
                document.write(`★`)
            }
            document.write('<br>')
        }
 </script>
  • 循环嵌套案例3: 打印99乘法表
<!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>
        div {
            display: inline-block;
            width: 100px;
            height: 40px;
            line-height: 40px;
            margin: 5px;
            background-color: #6cf;
            border: 1px solid #33b9fc;
            color: #fff;
            border-radius: 10px;
            box-shadow: 2px 2px 2px rgba(0, 0, 0, .2);
            text-align: center;
        }
    </style>
</head>

<body>

    <script>
        // 9 * 9 乘法表
        // 1. 打印几行? 9行
        // 2. 每行打印几个div? 当前行数个div
        // 外层循环 1 - 9
        for (let i = 1; i <= 9; i++) {
            for (let j = 1; j <= i; j++) {
                document.write(`
                    <div>${i} x ${j} = ${i * j}</div> 
                `)
            }
            document.write(`<br>`)
        }
        document.write(`<br>-------------------------------------------------------------------------------------------------------------------------------------------------------`)
        // 倒三角的
        document.write(`<br><br>倒三角的:<br><br>`)
        for (let i = 9; i >= 1; i--) {
            for (let j = 1; j <= i; j++) {
                document.write(`
                    <div>${i} x ${j} = ${i * j}</div> 
                `)
            }
            document.write(`<br>`)
        }
    </script>

</body>

</html>

数组

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

声明数组

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

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

使用数组

  • 取值语法

    • let names = ['小明', '小刚', '小红', '小丽', '小米'] names[0] //小明 names[1] //小刚
      1. 通过下标取数据
      1. 取出来是什么类型的,就根据这种类型特点来访问
  • 术语

      1. 元素:数组中保存的每个数据都叫数组元素
      1. 下标:数组中数据的编号
      1. 长度:数组中数据的个数,通过数组的length属性获得
  • 遍历数组

for (let i = 0; i < 数组名.length; i++) {
            数组名[i]
}
let nums = [10, 20, 30, 40, 50]
for (let i = 0; i < nums.length; i++) {
            document.write(nums[i])
}
  • 数组求和 、平均值
   <script>
        // 数组求和 和 平均值 案例
        let sum = 0
        let arr = [2, 6, 1, 7, 4]
        for (let i = 0; i < arr.length; i++) {
            sum += arr[i]
        }
        // for (let key in arr) {
        //     sum += arr[key]
        // }
        console.log('和: ' + sum);
        console.log('平均值: ' + sum / arr.length);
    </script>
  • 求数组最大值、最小值
    <script>
        let arr = [100, 1000, 1, 77, 52, 25, 7]
        let max = min = arr[0]
        for (let i = 1; i < arr.length; i++) {
            // 求最大值max
            if (arr[i] > max) {
                max = arr[i]
            }
            // 求最小值min
            if (arr[i] < min) {
                min = arr[i]
            }
        }
        console.log(`最大值max为: ${max}`);
        console.log(`最小值min为: ${min}`);
    </script>
    <script>
        // 用三元表达式法
        
        let arr = [11100, 1000, 1, 77, 522222, 25, -1, 7]
        // 先定义数组中下标为0的元素为最大值
        let max = min = arr[0]

        // 循环遍历数组 如果遍历数组中的元素大于max值,则将该项赋值给max,然后继续比较, 直到循环结束

        for (let i = 1; i < arr.length; i++) {
            max = arr[i] > max ? arr[i] : max
            min = arr[i] < min ? arr[i] : min
        }
        document.write(`
            最大值为max为: ${max}, 最小值为: ${min}
        `)
     </script>
  • 数组操作

image.png

查、改

    script>
        let arr = ['李狗蛋', '张翠花', '赵铁柱']
        // 查
        console.log(arr[2]);  //赵铁柱
        console.log(arr[0]);  //李狗蛋

        // 改
        arr[0] = '狗腿子'
        console.log(arr[0]);   //狗腿子
    </script>

追加数组元素

    <script>
        let arr = ['red', 'green']
        // 数组前面增加元素
        arr.unshift('first', 'second')
        // 数组后面增加元素
        arr.push('end')
        console.log(arr);
    </script>

筛选数组元素

    <script>
        // 将数组  [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);
    </script>

删除数组元素

   <script>
        // arr.pop() 从数组中删除最后一个元素,并返回删除元素的值
        let arr = ['李狗蛋', '张翠花', '赵铁柱']
        arr.pop()
        console.log(arr);

        // arr.shift() 从数组中删除第一个元素,并返回删除元素的值
        let arr1 = ['李狗蛋', '张翠花', '赵铁柱']
        arr1.shift()
        console.log(arr1);

        // arr.splice(起始索引, 删除几个元素)  删除几个元素的值如果不写则代表从起始位置删到最后, 第二个值省略则从代表一直删到最后
        // 当索引为负值的时候  代表数组中倒数第几个元素

        // 并返回删除的数组
        let arr2 = ['李狗蛋', '张翠花', '赵铁柱', '貂蝉', '西施', '王昭君', '杨玉环']
        arr2.splice(2, 4)   //删除arr[2]开始5个数组元素:赵铁柱、貂蝉、西施、王昭君
        console.log(arr2);
    </script>
  • 冒泡排序

      1. 冒泡排序是一种简单的排序算法。
      1. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列
      1. 的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
      1. 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
      1. 比如数组 [2,3,1,4,5] 经过排序成为了 [1,2,3,4,5] 或者 [5,4,3,2,1]
 <script>
        let arr = [5, 4, 3, 2, 1]

        // 1. 创建外层循环控制遍历轮数,轮数为数组长度 - 1
        // arr.length = 5
        for (let i = 1; i <= arr.length - 1; i++) {
            // 轮次为 i  交换次数为x     i + x  = arr.length   
            // 所以 x = arr.length - i
            // console.log(arr.length - i);
            // document.write(`第${i}轮循环<br>`);
            for (let j = 1; j <= arr.length - i; j++) {
                // document.write(`每轮循环的第${j}次<br>`)
                if (arr[j] < arr[j - 1]) {
                    let temp
                    temp = arr[j]
                    arr[j] = arr[j - 1]
                    arr[j - 1] = temp
                }
            }
        }
        console.log(arr);

    /*  let a = 12
         let b = 100
         // 声明一个临时变量,用作数据中转站
         let temp
 
         temp = a
         a = b
         b = temp
         console.log(a, b);
    */
 </script>
  • 综合案例: 动态渲染数据

image.png

<!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>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            position: relative;
            display: flex;
            width: 700px;
            height: 300px;
            border-left: 5px solid #6cf;
            border-bottom: 5px solid #6cf;
            margin: 200px auto;
            justify-content: space-around;
            align-items: flex-end;
            text-align: center;
        }

        .box::before {
            content: "";
            position: absolute;
            left: -13px;
            top: -25px;
            border: 10px solid transparent;
            border-bottom: 20px solid #6cf;
        }

        .box::after {
            content: "";
            position: absolute;
            right: -23px;
            bottom: -12px;
            border: 10px solid transparent;
            border-left: 20px solid #6cf;
        }

        .box>div {
            display: flex;
            width: 50px;
            background-color: #6cf;
            flex-direction: column;
            justify-content: space-between;
        }

        .box div span {
            margin-top: -30px;
        }

        .box div h4 {
            margin-bottom: -35px;
            width: 70px;
            margin-left: -10px;
        }
    </style>
</head>

<body>

    <!-- <div class="box">
        <div style="height: 123px;">
            <span>123</span>
            <h4>第1季度</h4>
        </div>
        <div style="height: 300px;">
            <span>300</span>
            <h4>第2季度</h4>
        </div>
        <div style="height: 120px;">
            <span>120</span>
            <h4>第3季度</h4>
        </div>
        <div style="height: 210px;">
            <span>210</span>
            <h4>第4季度</h4>
        </div>
    </div> -->

    <script>
        // 1. 准备一个数组存放用户输入的四个数据
        let arr = []
        // 2. 利用循环,实现4次prompt弹窗
        for (let i = 0; i < 4; i++) {
            arr.push(prompt(`请输入第${i + 1}季度的数据`))
        }
        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>
                    <h4>第${i + 1}季度</h4>
                </div>
            `)
        }
        document.write(`</div>`)
    </script>

</body>

</html>