day-08-31---数组

52 篇文章 0 订阅

一、什么是数组?

存储一组或一系列相关数据的容器。

二、数组的好处?

数组集中管理,提高性能

三、数组元素

存储在数组中的数据

四、数组下标

能够唯一标识一个容器的索引号
下标从0开始,到数组的长度减1.

五、数组属性

length:数组长度

六、如何声明数组

  1. 字面量 :[]
    无论[]中写什么,都是这个数组的元素。
  2. 构造函数的方式:new Array()
    (1)如果仅有一个参数且是正整数时,表示这个数组的长度
    (2)如果仅有一个参数且是小数或者是负数时,会报错
    (3)如果有多个参数或者是非数字类型(写的时候要加引号),则表示数组元素。

七、如何给数组赋值

  1. 初始化数组
  2. 先声明,后赋值
    注:操作数组空间,都要使用循环遍历数组(记得下标从0开始遍历)

八、数组方法(增删改截拼复排转)

1.增
前增unshift

unshift(元素,元素,……)
作用:在数组的前面增加元素(一个数组按一个元素增加)
返回值:新增后数组的长度
是否会影响原对象:是

var arr = [true,false,null];
                    console.log(arr.unshift(9,8,7,[6,5,4],3)); //8
                    console.log(arr);//[9,8,7,[6,5,4],3,true,false,null]
后增push

push(元素,元素,……)
作用:在数组的后面增加元素(一个数组按一个元素增加)
返回值:新增后数组的长度
是否会影响原对象:是

var arr = [true,false,null];
                    console.log(arr.push(9,8,7,[6,5,4],3)); //8
                    console.log(arr);//[true,false,null,9,8,7,[6,5,4],3]
2.删
前删shift()

shift()
作用:删除数组前面的一个元素(一次只能删除一个元素)
返回值:被删除的元素
是否会影响原数组:是

var arr = [true,false,null];
                    console.log(arr.shift()); //true
                    console.log(arr);//[false,null]
后删pop()

pop()
作用:删除数组后面的一个元素(一次只能删除一个元素)
返回值:被删除的元素
是否会影响原数组:是

var arr = [true,false,null];
                console.log(arr.pop()); //null
                console.log(arr);//[true,false]
3.改splice

splice(start,dellength,ele,ele,ele,……)
作用:可以在数组的任意位置进行增、删、改的操作。
返回值:被删除的元素数组
是否会影响原数组:是

var arr = [1,2,3,4,5,6,7,8,9,99];
            console.log(arr.splice(5)); //[6, 7, 8, 9, 99]
            console.log(arr);// [1, 2, 3, 4, 5]

            var arr = [1,2,3,4,5,6,7,8,9,99];
        console.log(arr.splice(5,2)); //[6, 7]
        console.log(arr);// [1, 2, 3, 4, 5, 8, 9, 99]

        var arr = [1,2,3,4,5,6,7,8,9,99];
        console.log(arr.splice(5,2,true)); //[6, 7]
        console.log(arr);// [1, 2, 3, 4, 5, true,8, 9, 99]
4.截slice

slice(start,end)
作用:截取数组中的部分元素。
返回值:截取到的新数组
是否会影响原数组:否

var arr = [1,2,3,4,5,6,7,8,9,99];
        console.log(arr.slice(4)); //[5, 6, 7, 8, 9, 99]
        console.log(arr);// [1,2,3,4,5,6,7,8,9,99]

        var arr = [1,2,3,4,5,6,7,8,9,99];
        console.log(arr.slice(4,6)); //[5, 6]
        console.log(arr);// [1,2,3,4,5,6,7,8,9,99]

         var arr = [1,2,3,4,5,6,7,8,9,99];
        console.log(arr.slice(-6,-4)); //[5, 6]
        console.log(arr);// [1,2,3,4,5,6,7,8,9,99]
5.拼concat

concat(ele,ele,……)
作用:将新的元素拼接到指定数组的后面。(如果元素是数组,展开最外层数组,将里面的元素进行拼接)
返回值:拼接后的新数组
是否会影响原数组:否

var arr = [1,2,3];
        console.log(arr.concat(true,[4,5,[6,7,8],9])); //[1, 2, 3, true, 4, 5, Array(3), 9]
        console.log(arr);// [1,2,3]
6.复(面试题 :要求至少写出两种复制数组的方法)
function copyArr(arr){
            return arr.slice(0);
        }
        function copyArr(arr){
            return arr.concat();
        }
        function copyArr(arr){
            var list = [];
            for(var i = 0,len = arr.length;i < len;i ++){
                list.push(arr[i]);
            }
            return list;
        }
7.排reverse() sort()
  1. reverse() :
    作用:将数组元素逆序存放
    返回值:逆序后的数组
    是否会影响原数组:是
var arr = [5,3,6,2,7];
        console.log(arr.reverse());//[7, 2, 6, 3, 5]
        console.log(arr);//[7, 2, 6, 3, 5]
  1. sort()
    作用: 按字符编码排序
    返回值:排序后的数组
    是否影响原数组:是
var arr = [5,3,6,10,100,2,7];
        console.log(arr.sort());//[10, 100, 2, 3, 5, 6, 7]
        console.log(arr);//[10, 100, 2, 3, 5, 6, 7]


        sort(function(a,b){return a - b;})  按数字从小到大排
        sort(function(a,b){return b - a;})  按数字从大到小排
8.转toString() join
  1. toString() (面试: 它不是数组的方法,是Object对象的方法)
    1> 数字.toString(2~36) : 将数字转为指定进制的字符串
    2> 数组转字符串
  2. join(‘连接符’);
    作用:将数组连接成以指定连接符的字符串
    返回值:转换后的字符串
    是否会影响原数组:否
//转toString()
        //(面试,它不是数组的方法,是Object对象的方法)
        // (1)数字.toString(2-36);将数字转为指定进制的字符串
        var num = 100;
        console.log( num.toString(8));
        console.log(num);
        // (2)将数字转为字符串
        arr = [1,5,66,4,true,'六'];
        console.log(arr.toString());
        console.log(arr);

        //join('连接符')
        //将数字连接成以指定连接符连接的字符串
        console.log(arr.join('-'));
        console.log(arr);
        alert(arr);
总结 不影响原数组的方法:截、拼、转

九、整数数组、字符串数组、对象数组、二维数组、多维数组

 [1,2,3,4,5]
    ['a','b','c']
    [{},{},{}]
    [[],[],[],[]]
    var arr = [[[[5]]]];
    console.log(arr[0][0][0][0])

十、for in (只能遍历对象)

语法:

for(变量 in 对象){    //循环变量不能赋值,遍历数组时,变量代表下标。遍历对象时,变量代表key
    语句组;
}
ar arr = [1,2,3,4];
    for(var i in arr){
        console.log(i,arr[i]);
    }

    var obj = {id : 1,name : '苹果',pirce : 50,num : 8};

//遍历对象
    for(var key in obj){
        console.log(key,obj[key]);
    }

十一、冒泡排序

冒泡排序:相邻的两个数进行比较,符合条件,交换位置。

<script>
        /*
        冒泡排序  相邻的两个元素进行比较,符合条件,交换位置
        */
        arr = [5,3,8,10,6,9];
    //从大到小
      //第一个for,比较一圈确定一个数
        // for(var i = 0;i < arr.length;i ++){
        //     //第二个for,相邻元素比较  n个数,比较n-1次,最后一个数不用再和后面的数比 ,第一圈比较完一,确定一个数,这个数就不用再比较了,第二圈比较完一,又确定一个数,......,比较的长度为arr.length-i
        //     for(var j = 0;j < arr.length - i;j ++){
        //         //比较一圈确定一个最小的数,排到了末尾
        //         if(arr[j] < arr[j + 1]){
        //             //符合条件 交换
        //             var t = arr[j + 1];
        //             arr[j + 1] = arr[j];
        //             arr[j] = t;
        //         }
        //     }
        // }
        // console.log(arr);
    //从小到大
        for(var i = 0;i < arr.length;i ++){
            for(var j = 0;j <= arr.length - 1;j ++){
                if(arr[j] > arr[j + 1]){
                    var t = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = t;
                }
            }
        }
        console.log(arr);
    </script>

应用案例

  1. 成绩管理系统(求出总成绩、平均成绩、最高成绩、最低成绩、成绩从高到低排序)
<script>        
        // 十一、成绩管理系统(求出总成绩、平均成绩、最高成绩、最低成绩、成绩从高到低排序)
        var num = parseInt(prompt('请输入班级人数:'));
        var arr = [];
        function fnInput(arr,num){
            for(var i = 0;i < num;i++){
                arr[i] = Number(prompt('请输入第' + (i + 1) + '个学生的成绩:')) ;
                console.log(arr);
            }
            return arr;
        }
        function fnSum(arr){
            var sum = 0;
            for(var i = 0,len = arr.length;i < len;i ++){
                sum += arr[i];
            }
            return sum;
        }
        function fnAvg(arr,num){
            return (fnSum(arr)/num).toFixed(2);
        }
        function fnMax(arr){
            arr.sort(function(a,b){return b-a});
            console.log(arr[0]);
            return arr[0];
        }
        function fnMin(arr){
            arr.sort(function(a,b){return a-b});
            return arr[0];
        }
        function fnSort(arr){
            arr.sort(function(a,b){return b-a});
            return arr;
        }
        fnInput(arr,num);
        console.log('总成绩为:' + fnSum(arr));
        console.log('平均成绩为:' + fnAvg(arr,num));
        console.log('最高成绩为:' + fnMax(arr));
        console.log('最低成绩为:' + fnMin(arr));
        console.log('从高到低排序为:' + fnSort(arr));
    </script>
  1. 歌咏比赛,有10个评委,有5个选手,求出每一个选手的平均得分(去掉一个最高分和一个最低分)。
<script>
        // 十、歌咏比赛,有10个评委,有5个选手,求出每一个选手的平均得分(去掉一个最高分和一个最低分)。
        function fnInput(){
            // var m = parseInt(prompt('请输入有几位选手'));
            for(var i = 0;i <= 2;i ++){
                alert('第' + (i + 1) + '位选手');
                arr = [];
                var sum = 0;
                for(var j = 0;j <= 3;j ++){
                    arr[j] = (Number(prompt('请输入第' + (j + 1) + '个评委的分')));
                    sum += arr[j];
                }  
                //最高分         
                fnMax(arr); 
                //最低分               
                fnMin(arr);

                //平均分
                console.log('总分' + sum);
                var avg = ((sum - i_max -i_min)/4).toFixed(2);
                console.log('第' + (i + 1) + '位选手的得分为' + avg);
            }
        }
        
        function fnMax(arr){
            //排序,从大到小
            var max = arr.sort(function(a,b){return b - a;})
                console.log(max);
                i_max = max[0];
                console.log('最高分' + i_max);
                return i_max;
        }
        function fnMin(arr){
            var min = arr.sort(function(a,b){return a - b;})
                // console.log(min);
                i_min = min[0];
                console.log('最低分' + i_min);
                return i_min;
        }
        fnInput();
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值