JavaScript数组

本文介绍了JavaScript中的数组基础知识,包括定义、数据类型、创建方式、数组长度、索引和遍历。通过实例展示了如何创建、遍历、操作数组,如交换元素、查找最高分和最低分等。此外,讨论了数据类型存储的区别、函数参数传递以及数组的常用方法,如push、pop、sort等。最后,通过示例展示了ES5数组遍历方法的应用,如forEach、map和reduce。
摘要由CSDN通过智能技术生成

一、数组基础

1. 数组定义:数组是一系列有序数据的集合,例如:[1,2,'true','good']

2. 数组的数据类型:

(1)基本数据类型:number/string/boolean/undefined/null

(2)复杂数据类型:Object/Function/Array/...

3. 创建数组有两种方式

<script>
        // 字面量方式创建数组
        //创建一个空数组
        var arr = [];
        //创建有内容的数组
        var arr = [12, 23, 'good', 'true'];

        //通过构造函数方式创建数组
        //创建空数组
        var arr = new Array();
        //创建一个有规定长度为5的数组
        var arr = new Array(5);
        //创建有内容的数组
        var arr = new Array(12, 23, 'morning', 'toxic');
    </script>

4. 数组长度(length),length表示的是数组中元素的数量

5. 数组索引(通常使用index表示),也叫作下标,表示元素在数组里面所处的位置序数,索引从0开始计数,第一个元素的索引是0,往后一次递增:

<script>
        var arr = [45, 66, 'hello'];//数组长度(length)为3
        // 输出
        console.log(arr[0]);//45
        console.log(arr[1]);//66
        console.log(arr[2]);//hello
</script>

6. 数组遍历

(1)根据数组中的索引来获取数组内容

(2)利用for循环,设置初始值为数组初始值0,终止值为数组长度或者等于数组长度-1,专业语言也叫遍历:

 7. 辅助理解案例:

(1)

<script>
        // 现有5名学生,语文成绩分别是98,87,95,89,77分,请定义一个成绩数组存储学生成绩并遍历输出
        var arr = [98, 87, 95, 89, 77];
        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }
        // 求5名学生总成绩?
        var sumScore = 0;
        for (var i = 0; i < arr.length; i++) {
            sumScore += arr[i];
        }
        console.log(sumScore);
        // 求大于平均分的学生成绩?
        var average = sumScore / arr.length;
        console.log(average);

    </script>

(2)

<script>
        // 有一个存储两个数的数组[3,6]写程序交换数组元素,输出[6,3]
        var arr = [3, 6];
        var temp = arr[0];
        arr[0] = arr[arr.length - 1];
        arr[arr.length - 1] = temp;
        console.log(arr);
    </script>

(3)

<script>
        /***
         *  1. 创建一个学生成绩数组,存储所有学生的数学成绩,分别是 89,78,90,99,67,59
            2. 求所有学生中分数最高的学生成绩,打印输出到界面
           */
        var stuArr = [89, 78, 90, 99, 67, 59];
        var max = 0;
        for (var i = 0; i < stuArr.length; i++) {
            if (stuArr[i] > max) {
                max = stuArr[i];
            }
        }
        console.log('最高成绩:' + max);

        // 3. 求所有学生中分数最低学生成绩,打印输出到界面
        var stuArr = [89, 78, 90, 99, 67, 59];
        var min = stuArr[0];
        for (var i = 0; i < stuArr.length; i++) {
            if (stuArr[i] < min) {
                min = stuArr[i];
            }
        }
        console.log('最低成绩:' + min);

        // 4.  求不及格的学生有几个,打印输出到界面
        for (var i = 0; i < stuArr.length; i++) {
            if (stuArr[i] < 60) {
                console.log(stuArr[i]);
            }
        }
</script>

二、数据类型之间存储的区别

1. 存储空间分为两种:堆:

2. 栈:主要存储数据类型的内容

3. 堆:主要存储复杂数据类型的类容

4. 数据类型之间的比较:

(1)基本数据类型之间是比较数据的值

(2)复杂数据类型之间是比较数据存储的地址 

 三、函数参数的的传递

基本数据类型和复杂数据类型的区别:

1. 因为复杂数据类型,变量存储的是地址,真实内容在堆空间内存储,所以赋值的时候相当于把obj存储的地址复制了一份给obj2变量;之后obj与obj2两个变量的地址一样,同时指向同一个堆内存空间,所以使用obj2这个变量修改空间的内容,obj指向的空间也会改变:

四、数组的常用方法

1. push():是用来在数组的末尾添加一个元素:

 2. pop():是用来删除数组最后一个元素:

3. unshift() :是在数组最前面添加一个元素:

4. shift():删除数组最前面的一个元素:

5. splice():是按照数组的索引来截取数组的某些内容:

(1)语法:splice(开始索引,截取数量,替换的元素),通常不写替换的元素:

 6. reverse():用来反转数组:

7. sort():给数组排序(按照字典顺序排序):arr.sort(function(a,b){ return a - b })

8. concat():是把多个数组进行拼接,拼接后不会改变原始数组,而是返回一个新的数组:

9. join():是把数组里面所有的内容连接起来,变成一个字符串,同时自己定义字符串间的连接符号,返回时不会改变原始数组,返回一个新的字符串:

 10. slice():返回一个新的数组对象,对象是由begin和end决定的原数组的部分拷贝,(包括begin,不包括end),原始数组不会改变:

11. indexOf():

12. includes():用于检测数组是否包含某个元素:

五、ES5常用的数组遍历方法

1. forEach():作用相当于for循环,同样是用于遍历数组,语法:arr.forEach(function(item,index,arr){}):

 2. map():和forEach类似,只是他可以对数组中的每一项进行操作,然后返回一个新的数组:

3. filter():和map()的使用类似,是按照所给条件来筛选数组,把原始数组中的满足条件的筛选出来,组成一个新的数组并返回:

4. find():遍历数组,返回数组中第一个满足条件的元素:

5. every():判定数组中是否每个元素都满足指定条件,全部满足则返回true

6. some():判定数组中是否有元素满足指定条件,只要存在一个满足,就返回true

7. reduce():接受一个方法作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值:

练习:

<script>
        //学生数组如下
        var students = [
            { number: 1001, name: 'jack', score: 98, gender: '男' },
            { number: 1002, name: 'rose', score: 95, gender: '女' },
            { number: 1003, name: '小丽', score: 85, gender: '女' },
        ]
        //找成绩大于平均分的所有学生
        var sum = 0;
        for (var i = 0; i < students.length; i++) {
            sum += students[i].score;
        }
        var average = sum / students.length;
        console.log(average);
        for (var i = 0; i < students.length; i++) {
            if (students[i].score > average) {
                console.log(students[i].name);
            }
        }
        // 找姓名是rose的学生并且性别是女的学生
        for (var i = 0; i < students.length; i++) {
            if (students[i].name == 'rose' && students[i].gender == '女') {
                console.log(students[i]);
            }
        }
        // 所有学生的总成绩,使用reduce方法
        var sum = students.reduce(function (s, item, index) {
            return s + item.score;
        }, 0)
        console.log(sum);
        // 所有学生成绩减十分,返回到新数组中
        var newArr = students.map(function (item, index) {
            item.score = item.score - 10;
            return item;
        })
        console.log(newArr);
        // 所有学生中是否有女生
        var flag = students.some(function (item, index) {
            return flag = item.gender == '女';
        });
        if (flag == true) {
            console.log('学生中有女生!');
        } else {
            console.log('学生中没有女生!');
        }
        //  所有学生中是否有不及格的学生
        var flag = students.some(function (item, index) {
            return flag = item.score < 60;
        });
        if (flag == true) {
            console.log('学生中有不及格的学生!');
        } else {
            console.log('学生中没有不及格的学生!');
        }

</script>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值