数组方法实现

forEach方法

forEach()方法用于遍历数组

  • 注意:forEach() 不会对空数组进行检测。
  • 注意:forEach() 不会改变原始数组。
    1. array.forEach(function(currentValue, index, arr), thisValue)
    | 参数 | 描述 | 是否必填 | | —- | —- | —- | | currentValue | 当前元素 | 必填 | | index | 当前元素的索引值 | 可选 | | arr | 可选当前元素所属的数组对象 | 可选 | | thisValue | 如果这个参数为空, “undefined” 会传递给 “this” 值 | 可选 |
  1. Array.prototype.myForEach = function(func){
  2. var len = this.length
  3. var _this = arguments[1] || window
  4. for(var i = 0; i < len; i++){
  5. func.apply(_this, [this[i], i, this])
  6. }
  7. }

filter方法

filter() 方法返回一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

  • 注意:filter() 不会对空数组进行检测。
  • 注意:filter() 不会改变原始数组。

    1. Array.prototype.myFilter = function(func){
    2. var arr = []
    3. var len = this.length
    4. var _this = arguments[1] || window
    5. for(var i = 0; i < len; i++){
    6. func.apply(_this, [this[i], i, this]) && arr.push(this[i])
    7. }
    8. return arr
    9. }

    map方法

    map() 方法按照原始数组元素顺序依次处理元素,会返回一个新数组。

  • 注意:map() 不会对空数组进行检测。

  • 注意:map() 不会改变原始数组。

    1. Array.prototype.myMap = function(func){
    2. var arr = [];
    3. var len = this.length;
    4. var _this = arguments[1] || window;
    5. for(var i = 0; i < len; i++){
    6. arr.push(func.apply(_this,[this[i],i,this]));
    7. }
    8. return arr;
    9. }

    every方法

    检测数值元素的每个元素是否都符合条件。

  • 注意:every() 不会对空数组进行检测。

  • 注意:every() 不会改变原始数组。

    1. Array.prototype.myEvery= function(func){
    2. var flag = true;
    3. var len = this.length;
    4. var _this = arguments[1] || window;
    5. for(var i = 0; i < len; i++){
    6. if(func.apply(_this,[this[i],i,this]) == false){
    7. flag = false;
    8. break;
    9. };
    10. }
    11. return flag;
    12. }

    some方法

    检测数组元素中是否有元素符合指定条件。

  • 注意:some() 不会对空数组进行检测。

  • 注意:some() 不会改变原始数组。

    1. Array.prototype.mySome= function(func){
    2. var flag = true;
    3. var num = 0;
    4. var len = this.length;
    5. var _this = arguments[1] || window;
    6. for(var i = 0; i < len; i++){
    7. if(func.apply(_this, [this[i], i, this])){
    8. break;
    9. }else{
    10. num ++;
    11. if(num == len-1){
    12. flag = false;
    13. break;
    14. }
    15. }
    16. }
    17. return flag;
    18. }

    reduce方法

    将数组元素计算为一个值(从左到右)。

  • 注意:reduce() 对于空数组是不会执行回调函数的。

    1. array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

    | 参数 | 描述 | 是否必填 | | —- | —- | —- | | total | 初始值,或者计算结束后的返回值 | 必填 | | currentValue | 当前元素 | 必填 | | currentIndex | 当前元素的索引 | 可选 | | arr | 当前元素所属的数组对象 | 可选 | | initialValue | 传递给函数的初始值 | 可选 |

  1. Array.prototype.myReduce = function(func, initValue){
  2. var len = this.length
  3. var _this = arguments[0] || window
  4. var nextValue = initValue
  5. for(var i = 0; i < len; i++){
  6. nextValue = func.apply(_this,[initValue, this[i], i, this])
  7. }
  8. return nextValue
  9. }

apply、call、bind方法实现

apply

改变this指向,参数为数组

call

改变this指向,参数为列表

bind

改变this指向,参数为数组

new的实现