數(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]; 
  1. prototype 返回對象類型原型的引用 (主要作用:對數(shù)組進行擴展)

    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 當前元素在數(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 可以為負數(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)換成為字符串再進行連接

     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ù)組

  1. array.every(callback(currentValue, index, array)[, thisArg]) 返回一個 true / false

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

  2. array.some(callback[, thisArg]) 返回一個 true/false

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

     需要在此注意 方法的對應(yīng)性  -> 一個很好的理解和記憶的思路
     
     some (||的類比) + every(&& 的類比)
    
  3. 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 
      

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

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

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

        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)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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