二阶段第九天

一 在排序好的数组中加入值

var arr = [1,3,6,8,9,12] ;
        var n = 0 ;

        // 比前一个数大,比后一个数小
        for(var i = 0 ; i < arr.length - 1 ; i++) {
 // 假如N小于第一个值直接插入到最前面
        if(n < arr[0]) {
            arr.splice(0 , 0 , n);
            break
        }
        // 假如N大于最后一个值,那直接插入到最后面
        if(n > arr[arr.length - 1]) {
            arr.push(n)
             break
        }
            if(n >= arr[i] && n <= arr[i+1] ) {
                arr.splice(i+1 , 0 , n)
                // 在插入值以后,数组会变长,后面就把插入的值加入判断,条件也会满足
                break
            }
        }
       
        console.log(arr);

在一个已经排好序的数组中插入值又不想影响数组的排序时,先判断这个值是否比第一个值小或者比最后一个值大,满足的话直接插入并且结束循环,如果不满足的话就对比数组中所有值,直到找到一个比前面数大,比后面数小的一个位置,再插入。

         二  数组的深浅复制 

 数组作为一个复杂数据类型,单纯的赋值复制,只是给新数组赋值了一个地址,假如给新数组添加一个内容,原来数组也会发生改变,这就是数组的浅复制。

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

        // 数组的浅复制 --- 只是复制了地址
        // 
        var arr2 = arr ;
        arr2.push('a')

例如以上代码。当arr2中添加了一个a后,arr也会随着发生改变。

而数组的深复制,不会对原数组产生任何影响,等于两个不同的数组。

深复制的方法有许多种,

1 遍历原数组,将数组中的每一个值提出,一个一个加入到新的数组中。

1 遍历原数组,将数组中的每一个值提出,一个一个加入到新的数组中。
var arr = [1,2,3,4,5] ;

        
        var arr2 = [] ;

        for(var i in arr){
            arr2.push(arr[i])
        }
        arr2.push('a')

2用slice()函数截取原数组中所有值,并加入新数组。

2用slice()函数截取原数组中所有值,并加入新数组。
var arr3 = arr.slice() ;
        console.log(arr3);

        arr3.push('a') ;

        console.log(arr);

     注意!!!!,以上方法只对1维数组有效,对多维数组无效。多维数组的深复制可以用递归解决。

       三 多维数组的深复制

    多维数组的深复制比1维数组麻烦,如果是常规的办法。,第一维是深复制,但是第二维第三维还是浅复制,如果需要对多维数组进行深复制,我们可以用递归的方法解决。

先判断数组里的每一个值是不是数组,如果是则继续调用函数,同时将函数的参数改为这个这个数组的这个值。

如果这个数不是数组,则直接将这个数加入到新的数组中,最后输出这个新数组的结果

 // 创建一个函数,参数为需要深复制的多维数组
        function deepArr(arr) {  
            // 创建一个新的数组
            var newArr = [] ;
            // 遍历原数组
            for(var i = 0 ; i < arr.length ; i++) {
                // 判断这个数组中的每一个值是不是一个数组,如果是,则继续调用这个函数本身,参数则变成了这个数组的第一个值
                // 直到里面没有数组,再将这个值加入到新数组中
                if(Array.isArray(arr[i])) {
                    // 继续遍历数组 ,还是得到一个数组
                    var list = deepArr(arr[i]) ;
                    // 再把得到的数组放入newArr
                    newArr.push(list)
                }
                // 如果第一个值就不是数组,则直接将这个值加入到新数组中
                else {
                    newArr.push(arr[i]) ; 
                }
            }
            // 最后把这个数组作为函数结果输出
            return newArr 
        }

    四  JS快速生成CSS的表格 

现在CSS里新建一个表格,在表格的头部输入标题(th) 

然后给tbody取一个ID名 链接js后,将js里的数组加入到CSS中。

<body>

    <table>
        <thead>
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>地址</th>
            </tr>
        </thead>
        <tbody id="tb">

        </tbody>
    </table>

    <script>
        var arr = [
            ['方总' , '男' , '32' , '青年公寓'],
            ['师爷' , '男' , '42' , '青年公寓'],
            ['班长' , '男' , '18' , '江滩边上'],
            ['方总' , '男' , '32' , '青年公寓'],
            ['方总' , '男' , '32' , '青年公寓'],
            ['师爷' , '男' , '42' , '青年公寓'],
            ['班长' , '男' , '18' , '江滩边上'],
            ['方总' , '男' , '32' , '青年公寓'],
        ]
        // 创建一个空字符串
        var res = '' ;
        // 遍历数组
        for(var i in arr) {
            // 在数组的第一维加上一个tr标签,加入字符串
            res += '<tr>'
                // 在遍历数组的第二维,在数组的第二维的每一个值加上td标签,并将这个值加入到字符串中
            for(var j in arr[i]) {
                res += '<td>' + arr[i][j] + '</td>'
            }
            res += '</tr>'
        }
        console.log(res);
        // 链接CSS
        var oTb = document.getElementById('tb') ;
        // 给输入框加内容 value
        // 给标签加内容   innerHTML
        // 把RES的值加入到标签中
        oTb.innerHTML = res ;




    </script>
    

        五 JS快速生成九九乘法表 

// 创建一个空字符串,用于存放每次循环计算的值
        var res = '' ;
        // 第一层循环,代表99乘法表的行数,一共9行,所以循环9次
        for(var i = 1 ; i <= 9 ; i++) {
            // 每循环一次加上一个P标签,用于换行
            res += '<p>'
                // 第二层循环代表99乘法表的列数,J的最大值由行数决定,所以J的值不能大于I
            for(var j = 1 ; j <= i ; j++) {
                // 二层每循环一次,添加一个J*I,并且用SPAN包起来
                res += '<span>' + j + '*' + i + '=' + i * j + '</span>' 
            }
            res += '</p>'
        }
        console.log(res);

        var oBox = document.getElementById('box') ;
        // 最后将结果输出到    css中
        oBox.innerHTML = res ;

         六 对象的介绍,以及对象同数组的区别

 数组:存储同一种类型的数据,

            有序性

  对象:描述同一类型的事物(属性,方法)

              无序性

数组一般用来同一类型的数据,如数字,字母,字符串等,而且数组的每一个值都拥有一个角标,可以通过角标来寻找这个值。

对象一般用来描述同意类型的数据,例如我描述一个人的 姓名,年龄,体重,身高。

以及使用方法(函数)等等,对象没有角标,单数每一个数据都有键名和键值。

var dog = {
            name : '二哈',
            age : 3 ,
            sex : '公',
            say : function () {  
                console.log('汪');
            }
        }
        这就是一个简单的对象

对象也可以遍历,但是因为没有下标,所以只能用普通循环,或者for in 循环来遍历,

而且遍历的值是键名而不是键值,(冒号前面的是键名,代表这个数据的名字,冒号后面的是键值,代表这个名字的值。)

for(var key in dog) {
            // console.log(key);
            console.log(dog[key]);
        }

对象的创建方式也有两种,一种是直接创建,另外一种是实例化一个对象,方法同数组类似,只是数组是方括号,而对象是花括号。

对象的赋值同数组不同,对象赋值时需将键名同键值一起说明,这样才方便后续好找到这个数据。

     // 声明一个变量为对象
        var obj = {} 

        // 实例化对象  -- 空对象
        var obj = new Object() ;
        // 赋值
        obj.name = '奔驰' ;
        obj.color = 'pink' ;
        obj.price = '100w' ;

 对象的深复制与浅复制,

对象作为一个复杂数据类型,同样有深复制和浅复制,浅复制同数组一样,直接哇一个新对象等于一个旧对象,此时复制的也只是一个地址而已。

对象的深复制同数组类似,先声明一个空对象,再遍历旧对象,提出旧对象的每个值以后,将这个值赋值给新对象。

 var person1 = {
            name : '方总',
            age : 18
        }
        var person2 = new Object() ;
        for(var key in person1) {
            person2[key] = person1[key]
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值