6-1 数组函数练习

6-1 数组函数练习

1、引用

/*          var num = 10;
            function show(num){
                num++;
                alert(num);
            }
            alert(num); //10

            show(num);  //11  num = num

            alert(num); //10*/


            /*
                引用
            */

            /*var arr = [1, 2, 3, 4];

            function show(arr){
                arr.push("hello");
                alert(arr);
            }

            alert(arr); //[1, 2, 3, 4]
            show(arr);  //[1, 2, 3, 4, "hello"]
            alert(arr); //[1, 2, 3, 4, "hello"]*/

2、引用排序函数

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src = "tool.js"></script>
        <script>
            var arr = [10, 9, 5, 1, 2, 6, 7];
            // bubbleSort(arr);
            selectSort(arr);
            alert(arr);
        </script>
    </head>
    <body>
        
    </body>
</html>

3、return

/*function add(num1, num2){
                var b = num1 + num2;
                return "hello";
            }*/
        /*
            1、确定你的函数要不要结果。
            2、return语法,return后面写什么,外面拿到的值,就是return后面的表达式。
        */


        /*var res = add(10, 20);
        alert(res);*/
        

4、arguments

            function show(){
                alert(arguments.length);
                alert(arguments); //输出:object Arguments
            }

            show(1, 2, 3);

            var arr = [1, 2, 3, 4, 5];
            show(arr);

5、习题

1、有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。([2,3,4,56,67,98] //63

2、编写函数map(arr) 把数组中的每一位数字都增加30%

3、编写函数has(arr , 60) 判断数组中是否存在60这个元素,返回布尔类型

        /*var arr = [2,3,4,56,67,98];
        var num = 63;
        for(var i = 0; i < arr.length; i++){
            if(arr[i] > num){
                arr.splice(i, 0, num);
                break;
            }
        }*/

        // alert(arr);
        /*
            关键:找出第一个第一个比该数大的数
        */

        var arr = [10, 20, 30, 40, 60];
        function map(arr){
            for(var i = 0; i < arr.length; i++){
                arr[i] = arr[i] * 1.3;
            }
        }

        /*map(arr);
        alert(arr);*/

        function has(arr, num){
            var isHas = false; //假设没有
            for(var i = 0; i < arr.length; i++){
                if(arr[i] == num){
                    isHas = true;
                    break;
                }
            }
            return isHas;
        }

        var res = has(arr, 60);
        alert(res);

4、生成13位条形码(对之前的知识综合练习)

Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。

    例如:690123456789
第三位计算其校验码的过程为:

                    1、前十二位的奇数位和6+0+2+4+6+8=26

                    2、前十二位的偶数位和9+1+3+5+7+9=34

                    3、将奇数和与偶数和的三倍相加26+34*3=128

                    4、取结果的个位数:128的个位数为8

                    5、用10减去这个个位数10-8=2

    所以校验码为2(注:如果取结果的个位数为0,那么校验码不是(10-0=10),
    而是0)实现方法ean13()计算验证码,输入12位条码,返回带验证码的条码。

    例如:输入:692223361219输出:6922233612192

            //想办法将这个十二位数拆成每一位
            //69012345678
            function barCode(num){
                //1、分别取出每一位数
                var numArr = []; //存储取下来的每一位数
                while(1){
                    if(num == 0){
                        break;
                    }
                    numArr.push(num % 10);
                    num = parseInt(num / 10);
                }
                numArr.reverse();

                //2、求奇数和和偶数和
                var odd = 0;
                var even = 0;
                for(var i = 0; i < numArr.length; i++){
                    if(i % 2 == 0){
                        //奇数位
                        odd += numArr[i];
                    }else{
                        //偶数位
                        even += numArr[i];
                    }
                }

                //3、
                var tmp = (odd + even * 3) % 10;
                if(tmp != 0){
                    tmp = 10 - tmp;
                }

                numArr.push(tmp);
                return Number(numArr.join(""));

            }

            var res = barCode(690123456789
);
            alert(res);

5、编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组

/*
倒着删除
【注】凡是遍历数据去重,都倒着删除。
*/

                function noRepeat(arr){
                //去重
                //选择arr.length - 1个数 和后面进行比较
                //i选出的数
                /*for(var i = 0; i < arr.length - 1; i++){

                    //j被比的数
                    for(var j = i + 1; j < arr.length; j++){
                        if(arr[i] == arr[j]){
                            arr.splice(j, 1);
                        }
                    }
                }*/

                for(var i = arr.length - 1; i > 0; i--){
                    for(var j = i - 1; j >= 0; j--){
                        if(arr[i] == arr[j]){
                            arr.splice(j, 1);
                        }
                    }
                }
            }


            var arr = [10, 20, 20, 20, 30, 20, 40, 50];
            noRepeat(arr);
            alert(arr);

6、猴子吃桃

最强王者法则:
1、找出临界值,临界值就是,不用计算,直接心算得出的值。
2、找出第n次和n-1次的关系
3、假设函数已经可以使用,写出n和n-1之间的公式。

        有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,
        又多吃了一只,第二天照此办法,吃掉剩下桃子的一半另加一只,
        天天如此,到第num(num <= 10)天早上,猴子发现只剩一只桃子了,
        问这堆桃子原来有多少只?
            n为还剩n天吃完的桃子数
    
分析:
                peach(10) / 2 - 1 = peach(9);
                peach(10) = (peach(9) + 1) * 2;
                peach(n) = (peach(n - 1) + 1) * 2;
        

            function peach(n){
                if(n == 1){
                    return 1;
                }
                return (peach(n - 1) + 1) * 2;
            }
            //46
            var res = peach(5);
            alert(res);

7、密文

/*
                某个公司采用公用电话传递数据,数据是四位的整数,
                在传递过程中是加密的,加密规则如下:
                    1、每位数字都加上5,
                    2、然后用除以10的余数代替该数字,
                    3、再将第一位和第四位交换,
                    4、第二位和第三位交换,请编写一个函数,传入原文,输出密文
            */

            //4 3 2 1
            function ciphertext(num){
                //1、拆成数组
                var numArr = [];
                while(1){
                    if(num == 0){
                        break;
                    }
                    numArr.push(num % 10);
                    num = parseInt(num / 10);
                }
                for(var i = 0; i < numArr.length; i++){
                    numArr[i] += 5;
                    numArr[i] = numArr[i] % 10;
                }
                
                return Number(numArr.join(""));
            }
            var res = ciphertext(1234);
            alert(res);

8、计算器

<head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <input type="text" id = "num1" placeholder="请输入第一个数">
        <input type="text" id = "num2" placeholder="请输入第二个数">
        <!-- 
            点击按钮以后,执行后续字符串中的代码
         -->
        <button onclick = "btnClick('+');">+</button>
        <button onclick = "btnClick('-');">-</button>
        <button onclick = "btnClick('/');">/</button>
        <button onclick = "btnClick('*');">*</button>
        <button onclick = "btnClick('%');">%</button>
    </body>
    <script>


        function btnClick(operator){
            // alert(operator); 
            var oNum1 = Number($("num1").value);
            var oNum2 = Number($("num2").value);
            //根据不同的运算符,进行不同的运算。
            var res = counter(oNum1, operator, oNum2);
            alert(res);
        }


        /*
            简化代码
        */
        function $(id){
            return document.getElementById(id);
        }

        function counter(num1, operator, num2){
            var res = 0;
            //1、运算符判断
            switch(operator){
                case "+":
                    res = num1 + num2;
                    break;
                case "-":
                    res = num1 - num2;
                    break;
                case "*":
                    res = num1 * num2;
                    break;
                case "/":
                    res = num1 / num2;
                    break;
                case "%":
                    res = num1 % num2;
                    break;
                default:
                    alert("error");
                    break;
            }
            return res;
        }

    </script>
</html>
【注】
    <body>
        <!-- onclick = ""后面字符串中写着js的执行代码 -->
        <button id = "btn" onclick = "btnClick();">按钮</button>
    </body>
    <script>
        /*var oBtn = document.getElementById("btn");
        oBtn.onclick = function(){
            alert(1);
        }*/

        function btnClick(){
            alert("点击");
        }
    </script>

posted @ 2018-07-06 20:50 飞刀还问情 阅读(...) 评论(...) 编辑 收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值