国产精品色哟哟_男男激情3p互攻_色偷偷影院_和女同学厕所做了四次

當(dāng)前位置: 首頁(yè) / 技術(shù)干貨 / 正文
深入理解數(shù)組的slice方法

2022-11-25

   數(shù)組 arr slice

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

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

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

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

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

  var arr=[1.3.5.7.9];

  var arr1=arr.slice();//[1.3.5.7.9];從頭開始選取

  var arr2=arr.slice(1);//[3.5.7.9];從下標(biāo)1開始選擇

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

  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

  //判斷這個(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寫一下slice,猜測(cè)哦,誰(shuí)也不知道JS底層怎么寫的。

  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)從開始選擇到尾部所有的元素放在新數(shù)組中,因此才可以轉(zhuǎn)換為新數(shù)組。

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開班動(dòng)態(tài)

More+
  • HTML5大前端 <高端班>

    開班時(shí)間:2021-04-12(深圳)

    開班盛況

    開班時(shí)間:2021-05-17(北京)

    開班盛況
  • 大數(shù)據(jù)+人工智能 <高端班>

    開班時(shí)間:2021-03-22(杭州)

    開班盛況

    開班時(shí)間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發(fā) <高端班>

    開班時(shí)間:2021-05-10(北京)

    開班盛況

    開班時(shí)間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數(shù)據(jù)分析 <高端班>

    開班時(shí)間:2021-07-12(北京)

    預(yù)約報(bào)名

    開班時(shí)間:2020-09-21(上海)

    開班盛況
  • 云計(jì)算開發(fā) <高端班>

    開班時(shí)間:2021-07-12(北京)

    預(yù)約報(bào)名

    開班時(shí)間:2019-07-22(北京)

    開班盛況
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報(bào)名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)