作业 ---JS 数组 循环

一、计算1-100所有数字相加的和 

   <script>
        // 计算1-100所有数字相加的和
        var sum = 0;
        for (var i = 1; i <= 100; i++) {
            sum += i;
        }
        console.log(sum);
    </script>

二、var arr=[1,5,2,9,7,4]  把数组元素由小到大排序输出

方法1 :冒泡排序法 

  <script>
        // var arr=[1,5,2,9,7,4] 把数组元素由小到大排序输出
        var arr = [1, 5, 2, 9, 7, 4];
        /* 
        第一次比5次 
        第二次比4次
        第三次比3次
        第四次比2次
        第五次比1次
        arr.length = 6
        */
        for (var i = 0; i < arr.length - 1; i++) { //外部循环 控制总共比较的次数
            for (var j = 0; j < arr.length - 1 - i; j++) { //内部循环 控制每次比较的次数
                if (arr[j] > arr[j + 1]) { //如果前面的值大于后面的值 则交换
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            console.log("第" + (i + 1) + "轮排序后:" + arr);
        }
      console.log("最后的数组排序:" + arr);
    </script>

方法2:插入排序法

    <script>
        // var arr = [1, 5, 7, 6, 9, 0]; 从小到大排列
        // 方法2 
        /* 
            1.默认第一个元素已经被排序
            2.第二个元素和第一个元素比较,然后调换位置
            3.第三个元素和第二个元素及第一个元素比较,按顺序调换位置
            .....依次类推

        */

        var arr = [1, 5, 7, 6, 9, 0];
        //定义一个属性 来统计排序了多少次
        var count = 0;
        // 从第二个元素开始与第一个元素开始比较所以 下标i = 1 因为外循环要比较5次 所以i<arr.length 
        for (var i = 1; i < arr.length; i++) { //大循环
            //规律是 第一轮比一次,第二轮比二次 .... 第n次比n次
            for (var j = 0; j < i; j++) { //内部循环
                // 如果后面的元素比前面的元素小 ,则交换
                if (arr[i] < arr[j]) {
                    var tem = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tem;
                    //交换一次统计一次
                    count++;
                }

            }
        }
        console.log(arr, "循环" + count + "次");
    </script>

        

三、作业的深拷贝 

注意多层次对象里面的引用类型需要多次判断进行多次拷贝,否则内部引用类型完成的是浅拷贝,内存地址是一样的

//  作业 对象的深拷贝
 <script>
        var person1 = {
            name: "lisi",
            age: 10,
            frend: ["a1", "a2", "a3", { name: "lisi", age: 10 }], // frend属性数组是一个引用数据类型,对应的是一个内存地址
            family: {  // family属性是引用数据类型,也是一个内存地址。
                number: 123,
                address: "四川成都",
                o1: { // 思考,如果是多层次的引用数据类型嵌套,怎样拷贝?
                    o2: {
                        name: "a1"
                    }
                }
            }
        }
        //   深拷贝需要创建一个新的对象
        var person2 = {};
        for (var item in person1) {

            // 如果item属性不是引用数据类型 则直接拷贝 
            if (typeof (person1[item]) != "object") {
                person2[item] = person1[item];

            }
            //如果item属性是数组 则需要新创建一个数组 遍历数组进行拷贝
            else if (Array.isArray(person1[item])) {
                //  创建一个新数组arr
                var arr = [];
                for (var o = 0; o < person1[item].length; o++) {
                    // 在arr数组的末尾追加元素
                    arr.push(person1[item][o])
                }
                // arr的值赋值给person2 [item]属性
                person2[item] = arr;
            }
            // 如果item属性是对象则需要在创建一个新的对象赋值

            else if (typeof (person1[item]) === "object") {
                var key = {};
                for (var k in person1[item]) {
                    key[k] = person1[item][key]
                }
                // 对象key的值赋值给person2 [item]属性
                person2[item] = key;
            }

        }
        console.log(person2.frend === person1.frend);
    </script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值