数组(Array)

96 阅读3分钟

数组(Array)

数组:有序的 数据的集合

1、数组的基本使用

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

2、声明语法

1648543032783

1648543156045

数组是按顺序保存,所以每个数据都有自己的编号

计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推

在数组中,数据的编号也叫索引或下标

数组可以存储任意类型的数据

演示: 里面函数的声明了解即可 后面的内容会有讲到

    <script>
        // 1、字面量声明数组
        // let arr = [1, 2, 'aqua', true]
        // console.log(arr);
        //2、使用 new Array     构造函数声明  了解即可
        let arr = new Array(1, 2, 3, 4)
        console.log(arr);
    </script>

3、取值语法

1648541165565

例 :

如果我想保存一个班里5个人的姓名怎么办?如果有多个数据可以用数组保存起来 然后放到一个变量中 管理非常方便

1648541196341

通过下标取数据 取出来是什么类型的,就根据这种类型特点来访问

这里的中括号表示一个空数组

我们可以把想要的数据直接写在里面就好了 不需要起名字

当你需要存储多个数据的时候 中间用逗号分隔就可以了

    <script>
        // 创建一个数组就是直接给变量赋值为一个中括号
        let arr = [100, true, 'hello world']
        // 索引(下标) 0   1     2
        // 下标 :从0开始 依次 + 1 
			console.log(arr);
    </script>

输出后在控制台的显示 依次排列 从0开始

1648542183119

4、 一些术语:

元素:数组中保存的每个数据都叫数组元素

下标:数组中数据的编号

长度:数组中数据的个数,通过数组的 length 属性获得

    <script>
        // 声明数组(array)
        let arr = ['冰冰', '铁甲宝宝', '西瓜', '榴莲', '雪梨']
        // 获取这个数组中第0个元素
        console.log(arr[0]);
        // arr.length 表示该数组的长度
        //  输出显示 数组的长度是多少
        console.log(arr.length);
        console.log(arr[100]); //不会有正常的结果(如果我们获取的元素的下标超出了数组的长度 显示的是undefined)
    </script>

5、遍历数组(重点)

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

语法:

    <script>
        let arr = [100, true, 'hello world']
        for (let i = 0; i < arr.length; i++) {
            // document.write(arr[i])
            console.log(arr[i]);
        }
    </script>

案例 :数组求和

    <script>
        let arr = [2, 6, 1, 7, 4]
        // 设一个求和的变量 
        let sum = 0
        // 2、遍历累加
        for (let i = 0; i < arr.length; i++) {
            // console.log(arr[i])
            // sum = sum + arr[i]
            // 简写方式
            sum += arr[i]
        }
        console.log(`数组的和是:${sum}`)
        // 3、平均值  和 除以 arr.length = 4
			console.log(sum / arr.length);
    </script>

案例 :数组求最大值和最小值

需求:求数组 [数字自己编] 中的最大值 分析:

①:声明一个保存最大元素的变量 max。

②:默认最大值可以取数组中的第一个元素。

③:遍历这个数组,把里面每个数组元素和 max 相比较。

④:如果这个数组元素大于max 就把这个数组元素存到 max 里面,否则继续下一轮比较。

⑤:最后输出这个 max

拓展: 自己求一下最小值

    <script>
        // 要求 输出最大值和最小值
        let arr = [2, 1, 4, 5, 66, 666, 88, 90]
        // max 里面要存的是最大值
        let max = arr[0]
        // min 里面要存的是最小值
        let min = arr[0]
        // 遍历数组
        for (let i = 0; i < arr.length; i++) {
            // 如果max 比数组元素里面的值小 我们需要把这些元素赋值给max
            if(max < arr[i]){
                max = arr[i]
            }
            // 三元书写方式
            max < arr[i] ? max = arr[i] : max
            if (min > arr[i]) {
                // 如果min 比 数组元素大 我们需要把数组元素给min
                    min = arr[i]
                }
            // 三元书写方式
            min > arr[i] ? min = arr[i] : min    
        }
        // 输出max的值
        console.log(`最大的值:${max}`);
        console.log(`最小的值:${min}`);
    </script>

柱形图案例:结合css

    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        ul{
            margin: 100px auto;
            list-style: none;
            width: 1000px;
            height: 600px;
            display: flex;
            border-left: 1px solid pink;
            border-bottom: 1px solid pink;
            justify-content: space-around;
            align-items: flex-end;
        }
        li{
            position: relative;
            width: 80px;
            background-color: pink;
        }
        span{
            position: absolute;
            top: -30px;
            left: 50%;
            transform: translateX(-50%);
        }
        div{
            position: absolute;
            top: 100%;
            width: 100%;
            text-align: center;
        }
    </style>
</head>
<body>
    <script>
        // let liheight = [100, 200, 250, 300]
        // let num = +prompt('请输入你想要生成的li标签的个数')
        // 设置一个高度的空数组
        let liheight = []
        // ul在循环外面设置字符串拼接 把循环包裹起来
        let lihtml = `<ul>`;
        for (let index = 0; index < 4; index++) {
            // 弹出获取用户的数据
            let height = +prompt(`请输入你想要的第${index + 1}个高度数据`)
            // 获取的数据添加进数组中
            liheight.push(height);
        }    
        for (let index = 0; index < 4; index++) {
            // 存放li标签 通过循环增加li标签 在li标签中填写css的行内式
            // 由用户输入的数据作为高度 liheight[index]替代
            // index初始为0 div里加1 让0变1
            lihtml += `<li style="height:${liheight[index]}px">
                <span>${liheight[index]}</span> 
                <div>第${index + 1}季度</div>
                <li/>`
        }
        lihtml += `</ul>`;
        // 输出结果
        document.write(lihtml)
    </script>

2、数组的操作

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

数组添加新的数据

arr.push(在后面新增内容)

arr.unshift(在前面新增内容)

掌握利用push向数组添加元素(数据)

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

语法:

    <script>
        // 原有数据两个 长度为2
        let arr = ['pink', 'skyblue']
        // 新增元素两个 排在后面 长度更新 此时length为4
        arr.push('red', 'aqua')
        // push 是在元素后面继续添加元素
        // UNshift 是在元素的前面添加新的元素
        // 可以单个使用也可以一起使用 看项目需要
        arr.unshift('bule')
        console.log(arr);
    </script>

重点案例 :数组筛选

需求:将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来,放入新数组 分析:

①:声明一个新的数组用于存放新数据newArr

②:遍历原来的旧数组, 找出大于等于 10 的元素

③:依次追加给新数组 newArr

    <script>
        // 重点案例
        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){
                // 满足条件 用push 追加给新的数组
                newarr.push(arr[i])
            }
        } 
        // 输新的数组 查看是否正确
        console.log(newarr)
    </script>

相似案例演示:数组去0案例

需求:将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中的 0 去掉后,形成一个不包含 0 的新数组 分析:

①:声明一个新的数组用于存放新数据newArr

②:遍历原来的旧数组, 找出不等于0的元素

③:依次追加给新数组 newArr

    <script>
        // 去掉数字 0 其他加入新数据
        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] !== 0){
                // 满足条件 用push 追加给新的数组
                newarr.push(arr[i])
            }
        } 
        // 输新的数组 查看是否正确
        console.log(newarr)
    </script>

删除数组中数据

arr.pop()

arr.shift()

arr.splice(操作的下标,删除的个数)

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

数组. shift( ) 方法从数组中删除第一个元素

演示:

    <script>
        // 原本5个数字
        let arr = [2, 0, 6, 1, 77]
        // arr.pop() :代表删除最后一个元素
        arr.pop()
        arr.pop()
        // 输出最新的数组显示 77 和 1 已经没有了
        console.log(arr);
        // 输出你删掉了哪个元素
        // console.log(arr.pop());
        // shift : 代表删除第一个元素
        arr.shift()
        console.log(arr);
    </script>

4️⃣种增删的综合方式

    <script>
        let arr = ['冰冰', '铁甲宝宝', '西瓜', '榴莲', '雪梨']
        // 删除第一个元素 arr1 = 被删的那个元素 冰冰  arr = 铁甲宝宝 西瓜 榴莲 雪梨
        let arr1 = arr.shift()
        // 删除最后一个元素  arr2 = 被删的那个元素 雪梨   arr = 铁甲宝宝 西瓜 榴莲 
        let arr2 = arr.pop()
        console.log(arr);
        console.log(arr1);
        console.log(arr2);
        // 末位增加元素
        arr.push('小白', '小红')
        // 开头增加元素
        arr.unshift('天线宝宝')
        console.log(arr);
    </script>

数组. splice() 方法 删除指定元素 工作常用

1648558945532

解释:

start 起始位置:

指定修改的开始位置(从0计数)

deleteCount:

表示要移除的数组元素的个数

可选的。 如果省略则默认从指定的起始位置删除到最后

    <script>
        let arr = [2, 0, 6, 1, 77]
        // splice 删除指定元素 splice (start 起始位置 ,deleteCount: 表示删几个)
        // start:起始位置 表示在那个位置开始删除  输入的是索引号
        // 索引号2 表示从第二个开始删除  可以不写deleteCount 但会把后面的全删了 写1 那就删除1个 写2就删除2个
        arr.splice(2, 1)
        console.log(arr);
    </script>

指定增加

    <script>
        let arr = ['冰冰', '铁甲宝宝', '西瓜', '榴莲', '雪梨']
        // 指定删除也可以变成指定增加 不想删除就写0 在后面添加想要增加的元素 
        arr.splice(2, 0, '大白')
        // 索引号2 是西瓜 添加就是把西瓜的2 占有 变成大白2 西瓜3 
        // 换个理解 西瓜是现任 大白是小三 小三上位 现任靠后
        console.log(arr);
    </script>

补充小知识

    <script>
        // 数组里面可以存放其他类型数据 但不建议这么做
        let arr = ['冰冰', 100, null, NaN, undefined, true]
        // 把数组清空 不想要里面的元素 arr = [] 或 arr.length = 0
        // arr = []
        // 保留三个元素其他不要
        arr.length = 3
        console.log(arr)
        let arr1 = ['冰冰', '铁甲宝宝', '西瓜', '榴莲', '雪梨']
        // 获取数组最后一个元素 arr1[arr.length - 1]
        console.log(arr1[arr1.length - 1]) //常用的规则
        // 直接修改元素 西瓜改傻瓜 
        arr1[2] = '傻瓜'
        console.log(arr1)
        // 新增 如果 10 这位置已经有元素那么就是修改
        // 如果没有 添加就可以了 最终数组长度变成10 中间没有赋值的属性为空属性 
        arr1[10] = '海绵宝宝'
        console.log(arr1)
    </script>

重新赋值

数组[下标] = 新值

案例演示:

    <script>
        // let arr = []
        // 输出显示为0 因为里面为空 没有数据
        // console.log(arr)
        // console.log(arr[0]); // 下标0 里面为空 显示undefined
        // 给数组里的下标序号 0 赋值为1 下标序号1  赋值为5 
        // 相当原本的 arr[] 里面添加 1 和 5  即是 arr[1, 5]
        // arr[0] = 1
        // arr[1] = 5
        // 输出显示结果
        // console.log(arr)
        // 或者
        let arr = ['aqua', 'red', 'orange']
        // 修改
        arr[0] = 'hotpink'
        console.log(arr)
    </script>

演示:

    <script>
        let arr = ['aqua', 'red', 'orange']
        // 修改
        arr[0] = 'hotpink'
        // 给所有的数组元素后面加个文字 
        for (let i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + '先生'
        }
        console.log(arr)
    </script>

查询数组数据

数组[下标]

或者我们称为访问数组数据 就是我们平常的控制台查询等代码