zoukankan      html  css  js  c++  java
  • 你好javascript day8

    1)数组的使用

    数组实际上就是来源对象,脱胎于对象,继承于对象
    在数组中所有的下标都会转换为number,
    如果不能转换为number的(也就是转换后是NaN的),就会默认添加对象的属性名
    数组的长度,仅记录下标的个数,不包含属性数量
    数组不可以使用点语法获取下标变量,但是可以使用点语法取属性
           var arr=["d","e","f","a"];
          // 通过这个数组的值创建一个对象,每个对象的属性名是这个数组的每个元素
          // 对象的这个属性名对应的值,随机0-9
          // 然后复制出一个新对象
          var obj={};
            for(var i=0;i<arr.length;i++){
                obj[arr[i]]=parseInt(Math.random()*10);
            }
            var o={};
            for(var prop in obj){
                o[prop]=obj[prop];
            }
            console.log(o[1]);//这里是找到了0-9的随机数
    //Math.random()*10   随机取0-9的数
    //parseInt   取整
    var obj={
    a:1,
    b:2,
    c:3,
    d:4
    };
    var e={};
    for(var prop in obj){
     e[prop]=obj[prop];
    };
    console.log(e[1]);//undefined  对象的所有属性名是无序的
    数组的循环是根据下标的数字从0开始循环到最大下标,有序
    对象是循环所有属性名,无序
    对象的属性遍历是根据对象属性名添加的顺序
    //这样可以完成不遍历空元素
     var arr=[2,4,6,,8,10];
     for(var i=0;i<arr.length;i++){
                    if(!(i in arr))continue;
                    console.log(arr[i]);
                } 
    ———————————————————————————————————————————— for(var i=0;i<arr.length;i++){ if(i in arr)console.log(arr[i]); }
    //对象的浅复制 
                var obj={a:1,b:2,c:3};
                var o={};
                for(var prop in obj){
                    o[prop]=obj[prop];
                }
                // 这样o就会把obj都复制过来
                // 对象赋值以后,所有内容都没有引用关系了
                obj.a=100;
                console.log(o.a);//1
    _____________________________________________
                // 以上就是一个对象赋值形成一个新对象
                // 要解决这类问题,就考虑到对象深复制
                 var obj={
                    a:1,
                    b:{
                        a:1,
                        b:2
                    }
                }
                var o={};
                // 这样只能复制解除最外层的引用关系,这种叫做浅复制
                for(var prop in obj){
                    o[prop]=obj[prop];
                }
                obj.a=10;
                obj.b.a=10;
                console.log(o.b.a); //10

    2) push,pop,unshift,shift  concat和join  splice

    push 在数组尾部添加一个或者多个元素,并且返回数组的新长度
    pop  删除数组尾部的最后一个元素,并且将这个被删除的元素返回
    unshift  在数组头部添加一个或者多个元素,并且返回数组的新长度
    shift   删除数组的第一个元素,并且返回被删除的元素
    concat  数组的合并,合并后会返回一个新数组,原来的两个数组不会变化
    join   将数组的每个元素以指定的字符连接形成新字符串返回
    splice  这个方法可以从指定的位置删除给定数量的元素,并且在这个位置插入需要的元素并且返回被删除的元素组成的新数组
    var   testArray=[1,2,3,4,5,6];
    var   newArray=[2,2,2];
    testArray.push(7)
    console.log(testArray);
    testArray.pop();
    testArray.unshift(0);
    var n=testArray.shift();
    console.log(n);//0
    var m=testArray.concat(newArray);//将两个数组合并返回数组新长度
    console.log(m);
    var l=testArray.concat();
    console.log(l);//直接使用concat() 可以完成数组的复制
    var s=testArray.join();
    console.log(s);//直接使用join()  默认用 ,把数组串联起来返回字符串
    console.log(testArray.join("|"));//将数组的每个元素以指定的字符连接形成新字符串返回
    console.log(newArray.slice(0,1,9),newArray);//9 2
    //arr.splice(从什么位置开始,删除多少个元素,要插入的元素);
    console.log(testArray.slice(0));
    //只有一个参数表示从什么位置开始,但是没有结束位置,意味着删除整个数组返回新的数组
    console.log(testArray.slice(-2));
    //从第几位开始可以是负数,从后向前数(倒数),因为没有给要删除的数量,因此删除到尾部
            // 去重
            var arr=[1,2,3,4,1,2,3,2,1,1,3,7,7,2,1,6,1,2,4,5,1,2,3];
            for(var i=0;i<arr.length;i++){
                var item=arr[i];
                for(var j=i+1;j<arr.length;j++){
                    if(item===arr[j]){
                        arr.splice(j,1);
                        j--;
                    }
                }
            }
            console.log(arr);
            // 去重
            var arr=[1,2,3,4,1,2,3,2,1,1,3,7,7,2,1,6,1,2,4,5,1,2,3];
            var arr1=[];
            for(var i=0;i<arr.length;i++){
                var item=arr[i];
                var bool=true;
                for(var j=0;j<arr1.length;j++){
                    if(arr1[j]===item){
                        bool=false;
                        break;
                    }
                }
                if(bool){
                    arr1.push(item);
                }
            }
  • 相关阅读:
    H5 + 3D + AR/VR 综述
    10中典型的软件开发模型
    总线宽度VS总线带宽
    最全程序设计流程、技术、工具、交付结果【软件全生命周期】
    一幅图读懂面向对象和面向过程程序设计的区别!
    C语言实现计算器,附源码,超简单!
    request.getRequestDispatcher()的两个方法forward()/include()!!!
    关于使用ResultSet ---结果集没有当前行
    JComboBox添加item的赋值类型问题!不一致的话会导致不能更改jcombobox的选择值
    关于String的两种赋值方式
  • 原文地址:https://www.cnblogs.com/zqm0924/p/12907559.html
Copyright © 2011-2022 走看看