<option id="mwy0y"><strong id="mwy0y"></strong></option>
  • <ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <ul id="mwy0y"></ul>
  • <del id="mwy0y"><dfn id="mwy0y"></dfn></del><ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <abbr id="mwy0y"></abbr>

    千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

    400-811-9990
    手機(jī)站
    千鋒教育

    千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

    千鋒教育

    掃一掃進(jìn)入千鋒手機(jī)站

    領(lǐng)取全套視頻
    千鋒教育

    關(guān)注千鋒學(xué)習(xí)站小程序
    隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽(yáng)
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當(dāng)前位置:長(zhǎng)沙千鋒IT培訓(xùn)  >  技術(shù)干貨  >  深入理解數(shù)組的slice方法

    深入理解數(shù)組的slice方法

    來(lái)源:千鋒教育
    發(fā)布人:qyf
    時(shí)間: 2023-02-02 17:05:55

    深入理解數(shù)組的slice方法

      slice() 方法可從已有的數(shù)組中返回選定的元素。原數(shù)組不改變返回新選定的元素組成的新數(shù)組。

      數(shù)組.slice(start,end)

      start: 可選 數(shù)組從什么位置開(kāi)始選擇,如果沒(méi)設(shè)置默認(rèn)值是0,從開(kāi)始選擇。

      end :可選,數(shù)組截取到哪里,默認(rèn)截取到數(shù)組的尾部

      var arr=[1,3,5,7,9];

      var arr1=arr.slice();//[1,3,5,7,9];從頭開(kāi)始選取

      var arr2=arr.slice(1);//[3,5,7,9];從下標(biāo)1開(kāi)始選擇

      var arr3=arr.slice(-1);//[9];從倒數(shù)第1項(xiàng)開(kāi)始選擇

      var arr4=arr.slice(2,4);//[5,7]從第二項(xiàng)選擇到第4項(xiàng)

      var arr5=arr.slice(-3,4);//[5,7]從倒數(shù)第3項(xiàng)選擇到正數(shù)第4項(xiàng)

      var arr6=arr.slice(-3,-1);//[5,7]從倒數(shù)第三項(xiàng)選擇到倒數(shù)第一項(xiàng)

      注釋:您可使用負(fù)值從數(shù)組的尾部選取元素。

      注釋:如果 end 未被規(guī)定,那么 slice() 方法會(huì)選取從 start 到數(shù)組結(jié)尾的所有元素。

      重點(diǎn)

      //返回一個(gè)對(duì)象,對(duì)象有max和min屬性,求出當(dāng)前參數(shù)的最大值和最小值

      function fn1(){

      var arr= Array.prototype.slice.call(arguments);

      if(arr.length===0) return;

      arr=arr.sort(function(a,b){return a-b});

      return {max:arr[arr.length-1],min:arr[0]};

      }

      fn1(3,5,7,9);//{max:9,min:3

      在這個(gè)案例中Array.prototype.slice.call(arguments)為什么會(huì)將偽數(shù)組轉(zhuǎn)換為數(shù)組呢

      這個(gè)問(wèn)題牽扯一下兩種概念

      1、prototype 原型,所有的數(shù)組對(duì)象如果需要使用什么方法那就必須將這個(gè)方法增加在原型中,而且在必須在里面使用this,這個(gè)this就是這個(gè)數(shù)組對(duì)象

      例如:

      //求數(shù)組中數(shù)值元素的和

      Array.prototype.sum=function(){

      var sum=0;

      //this就是調(diào)用這個(gè)方法的數(shù)組

      for(var i=0;i<this.length;i++){< p="">

      //判斷這個(gè)數(shù)組的第i項(xiàng)是不是數(shù)值

      if(!isNaN(this[i])){

      sum+=this[i];

      }

      }

      return sum;

      };

      var arr=[10,15,20,30,40];

      var sum=arr.sum();

      console.log(sum);//115;

      2、call 的作用,call在調(diào)用函數(shù)時(shí)可以替代函數(shù)中的this,例如:

      function fn2(){

      this.a=3;

      this.b=10;

      }

      fn2();//因?yàn)橹苯诱{(diào)用函數(shù)this就是window,

      //因此,這里等于給window增加屬性a和b。

      //那么window的屬性其實(shí)就是變量,因此實(shí)際上是增加變量a和b

      console.log(a,b);//3,10

      var obj={};

      fn2.call(obj);

      //這里將obj帶入函數(shù)后替代函數(shù)中this,

      //因此,其實(shí)就是給obj增加屬性a和屬性b

      console.log(obj.a,obj.b);//3,10;

      那么現(xiàn)在我們解釋一下Array.prototype.slice.call(arguments)。首先我們先模仿數(shù)組的原生API寫(xiě)一下slice,猜測(cè)哦,誰(shuí)也不知道JS底層怎么寫(xiě)的。

      Array.prototype.slice1=function(start,end) {

      if (!start) start = 0;

      if (!end) end = this.length;

      if (start < 0) start = this.length + start;

      if (end < 0) end = this.length + end;

      var arr = [];

      for (var i = start; i < end; i++){

      arr.push(this[i]);

      }

      return arr;

      };

      var arr=[1,3,5,7,9];

      var arr1=arr.slice1(2,4);//[5,7];

      上面這個(gè)就是模擬了slice的函數(shù)內(nèi)容。那么在這里,this就是這個(gè)數(shù)組。如果我們使用Array.prototype.slice1.call(arguments);那么就是把上面的這個(gè)方法中slice1函數(shù)中this用arguments替代了,類數(shù)組也是有下標(biāo)的,因此,就相當(dāng)于遍歷取出每個(gè)下標(biāo)存儲(chǔ)在新的數(shù)組中,并且返回這個(gè)新數(shù)組。而這里call()后面沒(méi)有帶參,意味著直接調(diào)用了slice1,start和end都沒(méi)有傳入,當(dāng)沒(méi)有傳參時(shí)默認(rèn)從開(kāi)始選擇到尾部所有的元素放在新數(shù)組中,因此才可以轉(zhuǎn)換為新數(shù)組。

    聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

    猜你喜歡LIKE

    bootstrap是什么?有什么用處

    2023-04-20

    自旋鎖原理是什么?自旋鎖有什么優(yōu)缺點(diǎn)

    2023-03-17

    Kafka的leader選舉機(jī)制是什么

    2023-03-03

    最新文章NEW

    多種java日志框架你真的了解嗎

    2023-03-17

    如何查看git用戶名和密碼

    2023-03-03

    2分鐘了解BFC

    2023-02-06

    相關(guān)推薦HOT

    更多>>

    快速通道 更多>>

    最新開(kāi)班信息 更多>>

    網(wǎng)友熱搜 更多>>