數(shù)組的拓展

擴(kuò)展運(yùn)算符(spread)是三個點(diǎn)(...)

{
       let arr=[1,2,3];
       console.log(...arr);//1 2 3

        //如果拓展運(yùn)算符后面是一個空數(shù)組犬钢,那么就什么也不執(zhí)行
       let a=[];
       console.log([...[],1]);//[1]
}

它好比 rest 參數(shù)的逆運(yùn)算移盆,將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列惰拱。
拓展運(yùn)算符有些情況下也可以將字符串和偽數(shù)組轉(zhuǎn)化為真正的數(shù)組,不過外面還得包一層中括號

{
    console.log([...'string']);// ["s", "t", "r", "i", "n", "g"]
    function show(){
          console.log([...arguments]);//[1, 2, 3, 4, 5]
    }
    show(1,2,3,4,5);
}

用途

  • 1合并數(shù)組
{
       let arr1=[1,3];
       let arr2=[4,3];
       let arr=[];
       console.log(arr.concat(arr1,arr2));//[1,3,4,3]
       //拓展運(yùn)算符
       console.log([...arr,...arr1,...arr2]);//[1, 3, 4, 3]
}
  • 2結(jié)構(gòu)賦值
{
       const [a,...arr]=[1,2,3,45,5];
       console.log(a);//1
       console.log(arr);//[2, 3, 45, 5]
       //只能放在參數(shù)的最后一位判没,否則會報錯胧辽。
       const [a,...arr1]=[1,23];
       console.log(arr1);//報錯
}
  • 3擴(kuò)展運(yùn)算符還可以將字符串轉(zhuǎn)為真正的數(shù)組
{
        console.log([...'hello']);//["h", "e", "l", "l", "o"]
        console.log(...'hello');//h e l l o
        let str=...'hello';//報錯
}

at()方法 數(shù)組或者字符串可以逆序索引元素

const arr = ['a',1,'vc',8,'dsgf']
const str = 'string'
console.log(arr.at(-1)) //dsgf
console.log(str.at(-2)) //n

Array.from()

{
        const json={
            0:'name',
            1:'age',
             length:2
         };
         console.log(Array.from(json));//["name", "age"]

         function show(){
             console.log(arguments);//[1, 2, 3, 4, callee: function, Symbol(Symbol.iterator): function]
             console.log(Array.from(arguments));//[1, 2, 3, 4]
         }
        show(1,2,3,4);

        console.log(Array.from('hello'));//["h", "e", "l", "l", "o"]
}

可以將偽數(shù)組和可遍歷的的對象轉(zhuǎn)化為真正的數(shù)組峻仇,也可以將字符串轉(zhuǎn)化為數(shù)組

Array.of()的操作,將完美一下new Array的方法

{
       console.log(Array.of(1,2,3));//[1,2,3]
       console.log(Array.of());//[]
       console.log(new Array(3));//[undefined × 3]
       console.log(Array.of(3));//[3]
}

copyWithin(target,start,end)自己玩自己的方法并且會改變自己邑商,跟splice不同摄咆,splice可以添加數(shù)組以外的元素

{
      let arr=[1,2,3,4,5,6];
      console.log(arr.copyWithin(1,3,5));//[1,4,5,4,5,6];
      console.log(arr.copyWithin(1,3));//[1,4,5,6,5,6]
      console.log(arr.copyWithin(0,-2,-1));//[5,2,3,4,5,6];
}

第二個console是在注釋第一個console的情況下打印出來的,對應(yīng)的第三個console是在注釋第一個和第二個console情況下打印出來的人断,如果不注釋不是這種情況吭从,因為copyWidth()會改變原來的數(shù)組

target(必需):從該位置開始替換數(shù)據(jù)。
start(可選):從該位置開始讀取數(shù)據(jù)恶迈,默認(rèn)為0涩金。如果為負(fù)值,表示倒
數(shù)暇仲。
end(可選):到該位置前停止讀取數(shù)據(jù)步做,默認(rèn)等于數(shù)組長度。如果為負(fù)值奈附,表示倒數(shù)全度。

數(shù)組的find()和findIndex()

{
       let arr=[1,2,3,4];
       arr.find((num)=>{
           if (num>2){
               console.log(num);// 3 4
           }
       });
      //find方法的回調(diào)函數(shù)可以接受三個參數(shù),依次為當(dāng)前的值斥滤、當(dāng)前的位置和原數(shù)組将鸵。
      arr.find((value,index,obj)=>{
          if (value>2){
             console.log(value+':'+index+':'+obj);//3:2:1,2,3,4  4:3:1,2,3,4
          }
       });
       //找出數(shù)組中第一個大于2的成員。如果沒有符合條件的成員佑颇,則返回undefined顶掉。
       console.log(arr.find((value,index,obj)=>{
             return value>2;
        }));//3
       //返回第一個符合條件的數(shù)組成員的位置,如果所有成員都不符合條件挑胸,則返回-1痒筒。
       console.log(arr.findIndex((value,index,obj)=>{
           return value>2;
       }));//2
}

findLastfindLastIndex方法 數(shù)組或者字符串可以逆序查找元素和index下標(biāo)

findLast 返回找到的元素,找不到返回undefined
findLastIndex 返回找到的index下標(biāo)茬贵,找不到返回-1

const arr = ['a',1,'vc',8,{name:'張三'},'dsgf']
console.log(arr.findLast(item => item.name === '張三')) // {name: '張三'}
console.log(arr.findLastIndex(item => item === 'dsgf')) // 5

數(shù)組的fill()方法

{
       //fill方法使用給定值簿透,填充一個數(shù)組。
       let arr=[1,2,3];
       arr.fill(9);
       console.log(arr);//[9,9,9]

        console.log(new Array(3).fill(2));//[2,2,2]
        //fill方法還可以接受第二個和第三個參數(shù)闷沥,用于指定填充的起始位置和結(jié)束位置萎战。
        console.log(arr.fill(7,1,2));//[1,7,3]
}

數(shù)組實例的 entries(),keys() 和 values()

{
      const arr=[1,2,3,4,5];

      for (let index of arr.keys()){
           console.log(index);//0 1 2 3 4
      }
       console.log(Object.keys(arr));// ["0", "1", "2", "3", "4"]

       for (let [index,val] of arr.entries()){
           console.log(index+':'+val);//0:1 1:2 2:3 3:4 4:5
       }

        console.log(Object.values(arr));//[1, 2, 3, 4, 5]
        // for (let val of arr.values()){
        //     console.log(val);//報錯 chrome 和 Firefox 不知道為什么
        // }
}

Object.fromEntries 自身可枚舉屬性的鍵值對數(shù)組轉(zhuǎn)化為對象

let arr=[
  ["name","李四"],
  ["age",18]
]
console.log(Object.fromEntries(arr));//{"name": "李四","age": 18}

fromEntriesentries是相反的舆逃,可以相互轉(zhuǎn)化的

let json={"name": "李四","age": 18};
console.log(Object.entries(json));//arr=[["name","李四"],["age",18]];

也可以轉(zhuǎn)化map結(jié)構(gòu)的鍵值對數(shù)組

let map=new Map([["name","張三"],["age",15]])
console.log(Object.fromEntries(map));//{"name": "張三","age": 15}

數(shù)組實例的 includes()

{
      let arr=[1,2,3,4,5,NaN];
      console.log(arr.includes(4));//true
      console.log(arr.includes(10))//false

      //該方法的第二個參數(shù)表示搜索的起始位置蚂维,默認(rèn)為0戳粒。如果第二個參數(shù)為負(fù)數(shù),則表示倒數(shù)的位置
      console.log(arr.includes(5,-4));//true
}

數(shù)組的空位

{
       //由于空位的處理規(guī)則非常不統(tǒng)一虫啥,所以建議避免出現(xiàn)空位蔚约。
       console.log(Array.from([,,,]));//[undefined, undefined, undefined]
       console.log(...[1,,2]);//1 undefined 2
       console.log([,'a','b',,].copyWithin(2,0)); // [,"a",,"a"]

        // entries()
        console.log([...[,'a'].entries()]); // [[0,undefined], [1,"a"]]

        // keys()
        console.log([...[,'a'].keys()]); // [0,1]

        // values()
        //console.log([...[,'a'].values()]); // [undefined,"a"]

         // find()
         console.log([,'a'].find(x => true)); // undefined

         // findIndex()
         console.log([,'a'].findIndex(x => true)); // 0
}

ES5 對空位的處理,已經(jīng)很不一致了涂籽,大多數(shù)情況下會忽略空位,ES6 則是明確將空位轉(zhuǎn)為undefined

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苹祟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子评雌,更是在濱河造成了極大的恐慌树枫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件景东,死亡現(xiàn)場離奇詭異砂轻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斤吐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門搔涝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人和措,你說我怎么就攤上這事庄呈。” “怎么了派阱?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵诬留,是天一觀的道長。 經(jīng)常有香客問我颁褂,道長故响,這世上最難降的妖魔是什么傀广? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任颁独,我火速辦了婚禮,結(jié)果婚禮上伪冰,老公的妹妹穿的比我還像新娘誓酒。我一直安慰自己,他們只是感情好贮聂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布靠柑。 她就那樣靜靜地躺著,像睡著了一般吓懈。 火紅的嫁衣襯著肌膚如雪歼冰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天耻警,我揣著相機(jī)與錄音隔嫡,去河邊找鬼甸怕。 笑死,一個胖子當(dāng)著我的面吹牛腮恩,可吹牛的內(nèi)容都是我干的梢杭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼秸滴,長吁一口氣:“原來是場噩夢啊……” “哼武契!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荡含,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤咒唆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后释液,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钧排,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年均澳,在試婚紗的時候發(fā)現(xiàn)自己被綠了恨溜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡找前,死狀恐怖糟袁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躺盛,我是刑警寧澤项戴,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站槽惫,受9級特大地震影響周叮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜界斜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一仿耽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧各薇,春花似錦项贺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至林螃,卻和暖如春奕删,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疗认。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工完残, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砌滞,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓坏怪,卻偏偏與公主長得像贝润,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铝宵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容