JavaScript数组

//第一种声明
        var arr1 = [1, 2, 3]
        console.log(arr1)
        //第二种声明
        var arr2 = new Array(10) //length为10
        console.log(arr2.length);


        //遍历
        var arr1 = [1, 2, 3]
        //普通遍历数组arr1
        for (var i = 0; i < arr1.length; i++) {
            console.log(arr1[i])
        }
        //for in遍历arr1 (下标 迭代器 next)
        for (var index in arr1) {
            console.log(arr1[index])
        }
        //for of遍历arr1 (迭代器实现) 只能数组  对象包含数组
        for (var value of arr1) {
            console.log(value)
        }



        //下标访问可以用字符arr[0] = arr['0']

        //给数组里面的元素随机给值
        var arr0 = new Array()
        for (var i = 0; i < 10; i++) {
            arr0[i] = Math.random() //0-1 包含0 不包含1
        }
        console.log(arr0);



        // 1, 求数组中所有元素的和
        function fn1(a, b, c, d) {
            var arr1 = new Array(a, b, c, d)
            var sum = 0;
            for (var i = 0; i < arr1.length; i++) {
                sum += arr1[i]
            }
            return sum
        }
        console.log(fn1(1, 2, 3, 4));


        // 2, 让数组中的元素交换位置(重要)
        var arr2 = [1, 2, 3, 4, 5]
        console.log(arr2);

        arr2.reverse()
        console.log(arr2);

        for (var i = 0; i < arr2.length / 2; i++) {
            tmp = arr2[i];
            arr2[i] = arr2[arr2.length - 1 - i]
            arr2[arr2.length - 1 - i] = tmp
        }
        console.log(arr2)

        // 3, 求数组的最大数和最小数(重要)
        var arr3 = [1, 2, 3, 4, 5, 10]
        var max = -Infinity, min = +Infinity;
        for (var index in arr3) {
            if (max < arr3[index]) {
                max = arr3[index]
            }
            if (min > arr3[index]) {
                min = arr3[index]
            }
        }
        console.log(arr3);
        console.log("最大值=" + max);
        console.log("最小值=" + min);

        // 4, 求数组的最小数的下标(重要)
        var arr4 = [1, -5, -10, 1]
        var min = +Infinity;
        var minIndex = 0;
        for (var index in arr4) {
            if (min > arr4[index]) {
                min = arr4[index]
                minIndex = index
            }
        }
        console.log(arr4);
        console.log("最小值为:" + min);
        console.log("其下标为:" + minIndex);




        // 练习:
        // 1, 不改变原数组, 取出数组[3, 2, 4, 5, 8, 6, 3, 9]中的[5, 8, 6].
        var arr1 = [3, 2, 4, 5, 8, 6, 3, 9]
        var newArr = arr1.slice(3, 6)
        console.log(arr1);
        console.log(newArr);
 
        // 2, 在数组[1, 2, 3, 4, 6, 7, 8]中对应的位置插入5, 变成[1, 2, 3, 4, 5, 6, 7, 8]
        var arr2 = [1, 2, 3, 4, 6, 7, 8]
        arr2.splice(4, 0, 5)
        console.log(arr2);
 
        // 3, 将数组["我", "是", "一", "只", "笨", "鸟"] 改成["我", "是", "一", "只", "聪", "明", "鸟"], 并打印出: "我是一只聪明鸟"
        var arr3 = ["我", "是", "一", "只", "笨", "鸟"]
        arr3.splice(4, 1, "聪", "明")
        var newArr = arr3.join('')
        console.log(arr3);
        console.log(newArr);
        // 4, 删除数组[20, 23, 21, 34, 54, 55, 32]中的倒数第二个和倒数第三个元素
        var arr4 = [20, 23, 21, 34, 54, 55, 32]
        arr4.splice(arr4.length - 3, 2)
        console.log(arr4);




        // 练习:
        // 1, 将数组[1, 5, 6, 3, 2, 8, 9, 4] 降序排序
        var arr1 = [1, 5, 6, 3, 2, 8, 9, 4]
        arr1.sort(function (a, b) { return b - a })
        console.log(arr1);
        // 2, 请将数组[1, 46, 74, 3, 5, 5]中的元素右移1位
        var arr2 = [1, 46, 74, 3, 5, 5]
        arr2.splice(0, 0, null)
        console.log(arr2);
        // 3, 插数: 在数组[1, 46, 74, 3, 5, 5]的下标为2的位置插入一个数字8,
        // 结果为[1, 46, 8, 74, 3, 5, 5]
        var arr3 = [1, 46, 74, 3, 5, 5]
        arr3.splice(2, 0, 8)
        console.log(arr3);




        // 1, 冒泡排序自己写一遍.[1, 46, 8, 74, 3, 5, 5]
        var arr1 = [1, 46, 8, 74, 3, 5, 5]
        for (var j = 0; j < arr1.length - 1; j++) {
            for (var i = 0; i < arr1.length - 1 - j; i++) {
                if (arr1[i] > arr1[i + 1]) {
                    var tmp = arr1[i]
                    arr1[i] = arr1[i + 1]
                    arr1[i + 1] = tmp
                }
            }
        }
        console.log(arr1);

        // 2, 给定一个含有n个元素的整型数组a,求a中所有元素的和
        function fn2(a) {
            var sum = 0
            for (var i = 0; i < a.length; i++) {
                sum += a[i]
            }
            return sum
        }
        var a = [1, 2, 3, 4, 5]
        console.log(fn2(a));


        // 3, 给定一个含有n个元素的整型数组a,打印其中的最大值和最小值.
        function fn3(a) {
            var max = -Infinity, min = +Infinity;
            for (var index in a) {
                if (max < a[index]) {
                    max = a[index]
                }
                if (min > a[index]) {
                    min = a[index]
                }
            }
            console.log("数组中最大值为:" + max);
            console.log("数组中最小值为:" + min);
        }
        var a = [3, -15, 0, 5, 100, 11]
        fn3(a)

        // 4, 给定一个不存在重复元素的整数数组,例如[6, 4, 7, 2, 5, 8]和一个数字,例如10,请设计一个函数找出两个元素(或同一个元素加自身),并且使这两个数的和为给定数字,并打印出来 例如[6, 4, 7, 2, 5, 8]和数字10.打印结果为: 6, 4  2, 8  5, 5

        function fn4(arr4, number1) {
            var newArr4 = arr4
            console.log("旧的:" + arr4)
            console.log("新的:" + newArr4)
            for (var j = 0; j < arr4.length; j++) {
                for (var i = 0; i < newArr4.length; i++) {
                    if (arr4[j] + newArr4[i] == number1) {
                        console.log(arr4[j], newArr4[i]);
                    }
                }
            }
        }
        var arr4 = [6, 4, 7, 2, 5, 8]
        var number1 = 10
        fn4(arr4, number1)

        // 5, 随机给出一个10位以内的数,然后输出该数共有多少位,并将每位的数字保存到数组中. 如: 1342, 位数为: 4, 数组为: [1, 3, 4, 2]
        function fn5(number1) {
            var arr5 = []
            var num = parseInt(number1)
            var str = num.toString()
            var len = str.length
            console.log("这个数是:" + str + "位数为:" + len)
            for (var i = 0; i < len; i++) {
                arr5.push(str[i])
            }
            console.log(arr5);
        }
        fn5(134256789)

        // 6, 给定两个升序整型数组a和b,打印其共同元素,比如:a = [0, 1, 2, 3, 4],b = [1, 3, 5, 7, 9],输出 1, 3
        function fn6(a, b) {
            console.log("相同的数字有:")
            for (var j = 0; j < b.length; j++) {
                for (var i = 0; i < a.length; i++) {
                    if (a[i] == b[j]) {
                        console.log(a[i]);
                    }
                }
            }
        }
        var a = [0, 1, 2, 3, 4]
        var b = [1, 3, 5, 7, 9]
        fn6(a, b)

        // 7, 有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中,如: [2, 3, 4, 56, 67, 98]    //63, 100
        function fn7(number1, number2) {
            var arr7 = [2, 3, 4, 56, 67, 98]
            var arr = arr7.concat([number1], [number2])
            arr.sort(function (a, b) { return a - b })
            console.log(arr);
        }
        fn7(68, 100)
 
        // 8, 取出数组[1, 3, 1, 4, 2, 3, 6, 2, 6, 1, 5]中的重复项, 存入一个新的数组, 并从大到小排序
        function fn8(arr8) {
            var newArr = []
            for (var i = 0; i < arr8.length; i++) {
                if (!newArr.includes(arr8[i])) {
                    newArr.push(arr8[i])
                    newArr8 = newArr.sort(function (a, b) { return a - b })
                }
            }
            console.log(newArr8);
        }
        var arr8 = [1, 3, 1, 4, 2, 3, 6, 2, 6, 1, 5]
        fn8(arr8)




        /* 9, 生成13位条形码(对之前的知识综合练习)
        Ean - 13码规则:第十三位数字是前十二位数字经过计算得到的校验码。            
        例如:690123456789 -> [6, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]      
        第十三位计算其校验码的过程为:    
        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(n)计算验证码,输入12位条码,返回带验证码的条码。
        例如:输入:692223361219输出:6922233612192 */
        function fn9(arr9) {
            console.log("输入初始值为:" + arr9)
            var num = parseInt(arr9)
            var str = num.toString()
            var len = str.length
            console.log("len:" + len)
            var arr = []
            var number13 = 0
            var sum1 = 0, sum2 = 0
            for (var i = 0; i < len; i++) {
                arr.push(str[i])
                if ((i + 1) % 2) {
                    sum1 += str[i] - 0
                }
                else {
                    sum2 += arr[i] - 0
                }
            }

            number13 = (10 - parseInt(sum1 + sum2 * 3 % 10) % 10)
            console.log(number13)
            console.log(arr9 + number13.toString())
        }
        fn9(692223361219)

        // 10, 开发一个标题为“FlipFlop”的游戏应用程序。它从1计数到100,遇到3的倍数就替换为单词“Flip”,5的倍数就替换为单词“Flop”,既为3的倍数又为5的倍数则替换为单词“FlipFlop”。
        function FlipFlop(n) {
            var arr10 = []
            for (var i=1; i<=n; i++) {
                arr10.push(i)
                if (!(i % 3)) {
                    arr10.splice(i-1, 1, "Flip")
                }
                if (!(i % 5)) {
                    arr10.splice(i-1, 1, "Flop")
                }
                if (!(i % 3)&& !(i % 5)) {
                    arr10.splice(i-1, 1, "FlipFlop")
                }
               
            }
            console.log(arr10);
        }
        FlipFlop(100)
posted @ 2022-07-29 21:28  苏沐~  阅读(106)  评论(0)    收藏  举报