+发表新主题
查看: 1581|回复: 0

[代码片段] js 数组API

[复制链接]

[代码片段] js 数组API

[复制链接]
水中花 发表于 2015-12-18 21:20:24 浏览:  1581 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
今天学习数组API

一. 数组API

1. 数组排序:arr.sort()  直接修改原数组

     问题:默认sort方法,只能将所有元素转为字符串再排序

     结果:无法对数字类型排序

  //数组排序

       var arr=[10,23,5,90,41,6,7];

       arr.sort();

                console.log(arr);

      其结果如下:

   211450ux29ojjeoe8zxe08.png

      以上结果可以看出,默认的sort()方法,将所有元素转为字符串按unicide码进行比较,这不是我们想要的结果

      解决方法:自定义比较规则,前面练习中的冒泡排序其实就是比较器函数的原始代码。                                                      

        1. 先定义比较器函数对象

                  比较器函数:专门封装任意两数比较逻辑的函数

                     参数必须是2个:a和b

                     函数体:比较两个数的大小

                     返回值:如果a>b,必须返回>0的数

                             如果a<b,必须返回>0的数

                             如果a==b, 必须返回0;

          数字比较器:

                   升序a>b:function compareSx(a,b){return a-b};

               降序a<b:function compareJx(a,b){return b-a};

               始终a是当前,b是下一个,所以参数ab顺序不能变

        2. 将比较器函数对象,传入sort方法内:

              语法:arr.sort(compare);


         

  1. //数组排序

  2.            <script>

  3.            function compareSx(a,b){return a-b}; //升序

  4.    function compareJx(a,b){return b-a}; //降序

  5.        var arr=[10,23,5,90,41,6,7];

  6.        arr.sort(compareSx);

  7.    console.log(arr);

  8.        arr.sort(compareJx);

  9.    console.log(arr);

  10.       </script>
复制代码
其结果如下:

211450ux29ojjeoe8zxe08.png


        注意: js中函数也是一个对象!

        函数对象可以被当做参数传递!

          函数对象传递到哪儿,就可以在哪儿调用!

例如:  

   

  1.   <script>

  2.       //函数当做对象的传递,函数参数也可以是变量

  3.      function card(shicai,gongju){//任务卡

  4.        console.log("使用"+gongju+"加工"+shicai);

  5. }

  6.     function taskTiantian(taskCard){//天天的任务

  7.        var shicai="鸡蛋";

  8.    var gongju="铁锅";

  9.                taskCard(shicai,gongju);

  10.    //天天按照任务卡的步骤,加工自己的食材

  11.    console.log("天天完成炒鸡蛋");

  12. }

  13.         function taskDuoduo(taskCard){//多多的任务

  14.        var shicai="肉";

  15.    var gongju="平底锅";

  16.                taskCard(shicai,gongju);

  17.    //多多按照任务卡的步骤,加工自己的食材

  18.    console.log("多多完成炒肉");

  19. }

  20. taskTiantian(card);//天天得到任务卡,开始执行任务

  21. taskDuoduo(card);//多多得到任务卡,开始执行任务

  22.   </script>
复制代码
          211450ux29ojjeoe8zxe08.png


   2.栈和队列:js都是用数组模拟

       栈:一端封闭,只能从另一端进出的数组

         何时使用栈:仅从一端进出数组时,就用栈结构

          规则:先进的后出

        从数组末尾出入栈:其他元素的下标不受影响

           末尾 入栈: arr.push(新值)

           末尾 出栈:var last=arr.pop()

   

  1. //栈,尾部进,尾部出

  2. var arr=[1,3,5,1,6];

  3.      arr.push(9,8,7);

  4. console.log(arr);

  5. var last=arr.pop();

  6. console.log(arr);

  7.              console.log(last);
复制代码
       211450ux29ojjeoe8zxe08.png


       从数组开头出入栈:每出入栈一次,其余元素下标都要瞬移

                   开头 入栈:arr.unshift(新值);

             开头 出栈:var first=arr.shift();

   

  1. //栈,头部进,头部出

  2.          var arr=[1,3,5,1,6];

  3.      arr.unshift(9,8,7);

  4. console.log(arr);

  5. arr.shift();

  6. console.log(arr);
复制代码
       211450ux29ojjeoe8zxe08.png

       队列:从一端进入,从另一端出的数组,其实是两种栈的结合

           arr.push(1,2);---->从结尾入列

           arr.shift();--------->从头部出列

         规则:先进的先出

     //队列

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

                     arr.push(8,9);

                              console.log(arr);

         arr.shift();

                              console.log(arr);


211450ux29ojjeoe8zxe08.png
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网