学习jsAPI

211 阅读3分钟

数组的API:前辈们提前定义好的,程序员可以直接使用的,这些函数只有数组可用;

1、这些API都不会修改原数组:

  1:arr to string:
           var str=arr.join("自定义链接符");
           固定套路:2个
               1:笔试题:将数组里面的内容拼接为一句话/单词;
                          无缝拼接:var str=arr.join("");
               2:将数组拼接为DOM页面元素
                 //数据
                 var arr=["北京","南京","西京","东京","重庆","贵州","黔南"];
                 //转为字符串,并且拼接好标签
                 var str="<开始>"+arr.join("</结束><开始>")+"</结束>";
                 //渲染到DOM树上
                 elem.innerHTML=str;
 2:数组拼接:添加元素的新方式
      把你传入的实参全部拼接到arr的末尾,
      var newArr=arr.concat(新值1,...);
      特殊:1、不会修改原数组,只会返回一个新数组
            2、concat支持传入数组参数,悄悄的将你传入的数组打散为单个元素后再拼接到末尾
 3:截取子数组:
      根据你传入的开始下标截取到结尾下标
      var subArr=arr.slice(starti,end+1);
      特殊:1、不会修改原数组,只会返回一个新子数组
            2、含头不含尾
            3、endi其实可以省略不写,会从starti位置一直截取到末尾
            4、其实两个参数都可以省略不写--会从头截到尾(深拷贝),和以前的按值传递(浅拷贝)不同,一个修改不会影响到另一个
            

2、这些API都会修改原数组

      4、删除、插入、替换:arr.length-=n
            删除:var dels=arr.splice(starti,n);//n代表删除的个数
              特殊:其实splice也有返回值,返回的是删除元素组成的一个新数组
            插入:arr.splice(starti,0,值1,...);
              注意:1、原sterti位置的元素以及后续元素都会向后移动
                    2、千万不要插入一个数组,会导致我们的数组一些是一维,一些是二维,遍历时会非常难受
            替换:var dels=arr.splice(starti,n,值1,...);
              注意:删除的元素个数不必和插入元素的个数相同;
      5、翻转数组:arr.reverse();--以后不会再使用;
      

Array API: 1:排序:两种方式:

      1、面试中要求手写冒泡排序:从第一个元素开始,依次比较相邻的两个元素,只要前一个元素大于后一个元素,两者就交换位置;
      公式:
          for(var j=1;j<arr.length;j++){
             for(var i=0;i<arr.length-j;i++){
                if(arr[i]>arr[i+1]){
                   var middle=arr[i+1]
                   arr[i]=arr[i+1]
                   arr[i+1]=middle;
                }
             }
          }
              
       2、正式开发中:排序的API
                     arr.sort();
                     问题1:默认会将元素们转为字符串,按位PKascii码,如果希望数字排序?
                     解决:
                          arr.sort(function(a,b){//回调函数
                             console.log(a);//拿到后一个
                             console.log(b);//拿到前一个
                             return a-b;//如果return返回的是一个正数,说明后一个数大于前一个数
                                        //如果return返回的是一个负数,说明后一个数小于前一个数
                                        //如果return返回的是一个0,说明后一个数==前一个数
                                        //而我们的sort方法刚好可以根据你返回的正数/负数/0来进行排序
                          });
                     问题2:只能升序排序,如何降序
                            arr.sort(function(a,b){
                               return b-a;
                            })
           强调!!!:排序其实非常重要,切记,只要以后页面中有排序功能,他的底层一个是一个数组,因为只有数组具有排序的方法;
           

栈和队列:添加元素和删除元素的新方法

         栈:其实就是数组,只不过是一段封闭,只能从另一端进去的数组;
         何时使用:优先使用最新的数据;
         如何使用:
                 开头进:arr.unshift(新值,...);//向前添加元素,缺陷是导致其余元素的下标发生改变
                 开头出:var first=arr.first();//向前删除元素,缺陷是导致其余元素的下标发生改变
                 结尾进:arr.push(新值,...);//向后添加元素,完全等效于arr[arr.length]或者arr.concat;
                 结尾出:arr.pop();//向后删除元素;
         队列:其实就是数组,只不过是一端进,另一端出
         何时使用:根据先来后到的顺序;
                 开头进:arr.unshift(新值,...);
                 结尾出:arr.pop();//向后删除元素;
                 
                 *结尾进:arr.push(新值,...);
                 开头出:var first=arr.first();
   ES3的数组API就算是学完啦,后面ES5还提供了6个API等待我们学习