数组的方法-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\8

    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\8

      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\8

      if(!Array.prototype.every) {
          Array.prototype.every = function(fn) {
              for(var i = 0; i < this.length; i ++)
          }
      }

猜你喜欢

转载自www.cnblogs.com/lagina/p/10587363.html