# 數(shù)組常用屬性和方法總結(jié)

數(shù)組常用屬性和方法總結(jié)

  1. 數(shù)組也是對象问潭,數(shù)組有對象的所有方法

1. 數(shù)組屬性(2個主要屬性)


  1. length -> 萬年不變的最常用屬性

    使用length 應(yīng)該注意的幾個問題 (javascript 很容易因為length 的問題導(dǎo)致整個數(shù)組的長度修改弧可,其他的多數(shù)語言不允許修改數(shù)組的長度

    • 對 arr 的length 賦值會導(dǎo)致 arr修改

       var arr = [1, 2 ,3];
       arr.length = 5;
       arr // [1, 2, 3, undefined, undefined]
      
       arr.length = 1;
       arr // [1];
      
    • 通過索引對 arr 的元素賦值會引起 arr 值得改變(正常情況)聪黎,但是對 arr 的索引超過其長度時也會引起 arr 的長度發(fā)生變化

       var arr = [1, 2, 3];
       arr[2] = 5;
       arr // [1, 2, 5];
      
       var arr = [1, 2, 3];
       arr[4] = 9;
       arr // [1, 2, 3, undefined, 4];
      
  2. prototype 返回對象類型原型的引用 (主要作用:對數(shù)組進(jìn)行擴(kuò)展)

     eg: 向數(shù)組中添加 max 方法, 使得數(shù)組可以使用 max() 取得 最大值
    
         function max() {
           var ele = this[0];
           for(var i = 0; i < this.length-1; i++) {
               ele = this[i] > this[i+1] ? this[i] : this[i+1];
           }
           return ele;
       }
    
       Array.prototype.max = max;
    
       [1,2,5,4,6].max() // 6
    

2.數(shù)組方法 (注意數(shù)組方法的大小寫) +

方法最重要的就是 return 和 參數(shù)


數(shù)組的增 刪 改 查

速記版本

    棧方法: push() , pop()
    隊列方法:  shift()   unshiift()
    重排序方法:reverse()   sort()
    分割合并方法: slice() splice() concat()  join()

    數(shù)組遍歷: map()  foreach()  filter()

注意 操作數(shù)組以后的返回值: 是否為數(shù)組线梗? 字符元素痊班?角撞,是否覆蓋原來的數(shù)組

map() 根據(jù)操作值改變原數(shù)組
foreach() 不需要返回值答毫,用來操作元素
filter() 根據(jù)返回的布爾值 構(gòu)成新數(shù)組褥民,不影響原數(shù)組

  concat 和 slice 都會返回一個新數(shù)組,不會更改原來的數(shù)組

  var arr = new Array('張三', '李四');
  arr instanceof Array     // true
  Array.isArray(arr)       // true    // 數(shù)組的兩個對比方法
                                      // 棧方法和隊列方法的順序很重要
 arr.push('王五')         //return:3           數(shù)組:[ '張三', '李四', '王五' ]   
 arr. pop()              //return '王五'        數(shù)組:[ '張三', '李四' ]   
 arr.shift()              //return: 張三         數(shù)組:['李四' ]  
 arr.unshift('趙六')       // return:  2         數(shù)組 :['趙六', '李四']

 arr.reverse()             // return ['李四', '趙六']
 arr.sclice(0, 1);         // return ['李四']     原數(shù)組: ['李四', '趙六']
 arr.splice(0, 1, '小小')   // return ['小小']   原數(shù)組:['小小', '趙六']

es6 新增的幾個很有用的方法

find( Fun ) // 返回 元素
findIndex( Fun ) // 返回元素位置
includes( ele ) // 返回 布爾值


<ps: 最早的分類....>
  查/索引: indexOf,
  增: push, unshift,  concat, join
  刪: pop, shift, slice
  改: splice  萬能方法
  其他:sort(), reverse()

    數(shù)組的截取和合并:splice 和 concat
    數(shù)組和字符串的轉(zhuǎn)換:  join (toLocaleString 洗搂、toString 消返、valueOf)
        [1, 2, 3, 4, 5].join('') //12345;
        'language'.split('') //['l', 'a', 'n', 'g', 'u', 'a', 'g', 'e'];
    數(shù)組的拷貝:  concat(), slice(0)
    數(shù)組元素的排序 sort() , reverse()

`注意數(shù)組元素的長度(length)是可變的`
`concat 和 slice 都會返回一個新數(shù)組载弄,不會更改原來的數(shù)組`

es5 的數(shù)組9個實用方法

Array.prototype.indexOf
Array.prototype.lastIndexOf
Array.prototype.every
Array.prototype.some
Array.prototype.forEach
Array.prototype.map
Array.prototype.filter
Array.prototype.reduce
Array.prototype.reduceRight
  1. indexOf ()

    return 當(dāng)前元素在數(shù)組中的索引

    對用 lastIndexof (這個不解釋)

    該`返回值`配合數(shù)組的 splice,slice 或者 字符串的 slice,substr,substring 等增刪改方法有奇效。
    
  2. sort

    返回排序好的數(shù)組

       可按照自定義的邏輯排序
    
  3. push 將元素添加至數(shù)組的末尾, 與 pop 對應(yīng)

      var arr = []
     arr.pop(); // 空數(shù)組繼續(xù)pop不會報錯撵颊,而是返回undefined
     arr; // []
    
  4. shift 將數(shù)組隊首的元素刪除宇攻,與 unshift 對應(yīng)

     var arr = [];
     arr.unshift() //  空數(shù)組繼續(xù) shift 不會報錯,而是返回 undefined
     arr;  // []
    
  5. concat 方法 concat(arr1, arr2, arr3)

    return 一個連接好的新數(shù)組

    注意點:concat 會返回一個新數(shù)組倡勇,而不修改原來的數(shù)組

  6. slice 方法 slice(start,end)

    return 一個分割好的新數(shù)組

    注意點: slice會返回一個新數(shù)組逞刷,而不是修改原來的數(shù)組

     slice 對應(yīng) string 的 subString 方法,截取元素返回一個新的 Array
    
     var arr = [1, 2, 3, 4]
     arr.slice(1, 3) //[2, 3, 4]
    
  7. 數(shù)組元素反轉(zhuǎn) reverse() reverse() // 沒有參數(shù)

     var arr = [1, 2, 3, 4];
     arr.reverse() // [4, 3, 2, 1];
    
  8. splice 數(shù)組修改的萬能方法 splice (index, count, ele1, ele2 ....)

    注意點:

         index 可以為負(fù)數(shù)译隘,表示從隊尾開始修改
    
         count 需要 刪除 的數(shù)量, 為 0 表示不刪除
    
         ele1, ele2...... 可以向數(shù)組中添加的元素
    
     var arr = [1, 2, 3, 4];
     arr.splice(1, 0, '1', '3');
     arr // [1, '1', '3', 2, 3, 4]
    
  9. join 將元素用指定的字符串連接起來 ,join 會將每個元素 轉(zhuǎn)換成為字符串再進(jìn)行連接

     var arr = [1, 3, 'w', 'r'];
     arr.join('-');
     arr // "1-3-w-r"
    

3. 數(shù)組的遍歷方法


  1. 萬年不變的 for 循環(huán)

    注意不要使用 for in 循環(huán) 洛心,有坑自己找

  2. array.forEach(callback (currentValue, index, array)[, thisArg])

    直接修改原數(shù)組

    forEach 中的callback 有三個參數(shù)

    作用: 為了為每個元素都執(zhí)行添加執(zhí)行某個函數(shù)

  3. array.map(callback (currentValue, index, array)[, thisArg])

    返回一個新數(shù)組

    返回一個經(jīng)過處理的新數(shù)組,不會破壞原來的數(shù)組

  4. array.every(callback(currentValue, index, array)[, thisArg])

    返回一個 true / false

    測試數(shù)組的所有元素是否都通過了指定函數(shù)的測試固耘。 (&& 的概念)

  5. array.some(callback[, thisArg])

    返回一個 true/false

    測試數(shù)組中的某些元素是否通過了指定函數(shù)的測試 (|| 的概念)

     需要在此注意 方法的對應(yīng)性  -> 一個很好的理解和記憶的思路
    
     some (||的類比) + every(&& 的類比)
    
  6. var new_array = arr.filter(callback(currentValue, index, array)[, thisArg])

    返回一個函數(shù)處理結(jié)果為 true 的元素組成的數(shù)組

    返回一個新數(shù)組

     function isBigEnough (value) {
         return value > 10;
     }    
    
     var filtered = [1, 12, 3, 54, 10].filter(isBigEnough);
    
     filtered // [12, 54]
    

4. 數(shù)組特殊處理的應(yīng)用


  1. 數(shù)組的值比較 是否相等(因為數(shù)組為引用類型的數(shù)據(jù),所以數(shù)組不能直接比較

     eg: var arr = ['1', '2', '3'];
         var arr2 = ['1', '2', '3'];
    
         arr == arr2 ?   // false
    

    數(shù)組比較值是否相等的集中方法

    • 將數(shù)組轉(zhuǎn)換為字符串然后比較其是否相等

        eg: var arr = ['1', '3', '2'];
      
            var arr2 = ['1', '3', '2'];
      
            arr.toString() == arr2.toString() ? // true
      

      但是當(dāng)數(shù)組中的值大小相同词身,但因為數(shù)組順序不同時轉(zhuǎn)出來的字符串也不相同

        ['1', '2', '3'].toString() == ['1', '3', '2'].toString ?  //false
      

      現(xiàn)將數(shù)組進(jìn)行排序厅目,然后作比較。

        var arr = ['1', '2', '3'];
        var arr2 = ['1', '3', '2'];
      
        arr.sort().toString() == arr2.sort().toString() ?   // true
      
  2. 判斷數(shù)組中是否有 空值

    arr[index] =="" || typeof(arr[index]) == 'undefined'

    typeof(arr[index]) == 'undefined' 主要用于判斷數(shù)組無意間加長后數(shù)組中會增加 undefined 值

  3. 數(shù)組復(fù)制

    主要原理: 尋找數(shù)組中可以返回新數(shù)組的方法

    1. concat 數(shù)組的方法法严,返回一個新數(shù)組,在 concat 后面不連接任何元素即可返回 新數(shù)組

      var arr = [1, '23', 2];
      var arr2 = arr.concat();
      arr2 // [1,'23',2];
      arr // [1,'23',2];

    2. slice 數(shù)組的方法损敷,返回一個新數(shù)組,

      slice 不采取任何符號切分即可返回一個新數(shù)組

      var arr = ['1', '2', '3'];
      var arrCopy = arr.slice();
      arr // ['1', '2', '3'];
      arrCopy // ['1', '2', '3'];

  4. 數(shù)組和數(shù)組字符之間的轉(zhuǎn)換

    數(shù)組轉(zhuǎn)為字符數(shù)組

       arr  = [1,2,3,4];
       var arrString = "[" + arr + "]";   //"[1,2,3,4]"
    

    字符數(shù)組轉(zhuǎn)為數(shù)組

        eval('(' + arrString + ')');     //[1,2,3,4];
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市深啤,隨后出現(xiàn)的幾起案子拗馒,更是在濱河造成了極大的恐慌,老刑警劉巖溯街,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诱桂,死亡現(xiàn)場離奇詭異,居然都是意外死亡呈昔,警方通過查閱死者的電腦和手機挥等,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堤尾,“玉大人肝劲,你說我怎么就攤上這事」Γ” “怎么了辞槐?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粘室。 經(jīng)常有香客問我催蝗,道長,這世上最難降的妖魔是什么育特? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任丙号,我火速辦了婚禮先朦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犬缨。我一直安慰自己喳魏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布怀薛。 她就那樣靜靜地躺著刺彩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枝恋。 梳的紋絲不亂的頭發(fā)上创倔,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天挖炬,我揣著相機與錄音拣挪,去河邊找鬼李茫。 笑死十电,一個胖子當(dāng)著我的面吹牛台盯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畏线,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼静盅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杯矩,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤栈虚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后史隆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂务,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年泌射,在試婚紗的時候發(fā)現(xiàn)自己被綠了粘姜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡熔酷,死狀恐怖孤紧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拒秘,我是刑警寧澤号显,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布臭猜,位于F島的核電站,受9級特大地震影響押蚤,放射性物質(zhì)發(fā)生泄漏蔑歌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一揽碘、第九天 我趴在偏房一處隱蔽的房頂上張望次屠。 院中可真熱鬧,春花似錦雳刺、人聲如沸劫灶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽本昏。三九已至,卻和暖如春滞详,著一層夾襖步出監(jiān)牢的瞬間凛俱,已是汗流浹背紊馏。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工料饥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朱监。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓岸啡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赫编。 傳聞我的和親對象是個殘疾皇子巡蘸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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