數組的方法-ES5拓展

數組ES5拓展的方法以及實現方法


查找數組元素的索引值

  • indexOf 和 lastiIndexOf
    • indexOf 是從首往尾查找,當第一次找到匹配的成員元素時,返回該成員的索引值
    • lastIndexOf是從尾往首查找,當第一次找到匹配的成員元素時,返回該成員的索引值
    • 若是沒有查找到成員,會返回-1
    var arr = ["Hello", "World", "Hello", "World"];
    var pos1 = arr.indexOf("Hello");
    var pos2 = arr.lastIndexOf("Hello");
    console.log(pos1); \\ 0
    console.log(pos2); \\ 3
  • 兼容IE6\7\8javascript

    if(!Array.prototype.indexOf) {
        Array.prototype.indexOf = function(item) {
            var arr = this;
            for(var i = 0; i < arr.length; i ++) {
                if(arr[i] === item) {
                    return i;
                }
            }
            return -1;
        }
      Array.prototype.lastIndexOf = function(item) {
          var arr = this;
          for(var i = arr.length - 1; i > -1; i --) {
              if(arr[i] === item) {
                  return i;
              }
          }
          return -1;
      }      
    }

數組的迭代器

  • forEach(fn)
    • 遍歷數組,執行函數fn,該函數會傳入三個參數
      • 第一個參數:成員值
      • 第二個參數: 成員的索引值
      • 第三個參數: 數組自己
    • forEach沒有返回值,若是在函數內對值進行操做,會影響原數組
    • 兼容IE6\7\8java

      if(!Array.prototype.forEach) {
          Array.prototype.forEach = function(fn) {
              for(var i = 0; i < this.length; i ++) {
                  fn(this[i], i, this);
              }
          }
      }
    • 若是使用jQuery的話,不須要考慮兼容性問題,所以也能夠兼容IE6\7\8,傳入兩個參數
      • 第一個參數:要遍歷的數組
      • 第二個參數:函數,該函數傳入兩個參數,第一個是索引值,第二個是成員值,注意與forEach不一樣
      $.each(arr, function(index, value));
  • map(fn)
    • 遍歷數組而且映射,返回一個新的數組,一樣會傳入三個參數,與forEach傳入的三個參數同樣
    • 該方法會返回一個新數組,不會影響到原數組
    • 兼容IE6\7\8數組

      if(!Arrray.prototype.map) {
          Array.prototype.map = function(fn) {
              var result = new Array();
              for(var i = 0; i < this.length; i ++) {
                  result.push(fn(this[i], i, this));
              }
              return result;
          }
      }
  • some(fn)
    • 遍歷數組並判斷是否知足條件,若是有知足的返回true,都沒有知足則返回false
    • 該方法與forEach方法傳入fn的三個參數同樣
    • 兼容IE6\7\8函數

      if(!Array.prototype.some) {
          Array.prototype.some = function(fn) {
              for(var i = 0; i < this.length; i ++) {
                  if(fn()) {
                      return true;
                  }
              }
              return false;
          }
      }
  • every(fn)
    • 遍歷數組並判斷是偶知足條件,若是有不知足的返回false,都知足則返回true
    • 該方法與forEach方法傳入fn的三個參數同樣
    • 兼容IE6\7\8this

      if(!Array.prototype.every) {
          Array.prototype.every = function(fn) {
              for(var i = 0; i < this.length; i ++)
          }
      }
相關文章
相關標籤/搜索