第十五篇 如何实现数组filter方法 ?

参照 ecma262 草案的规定,关于 filter 的规范如下图所示:

filter 的规范

代码如下:

Array.prototype.filter = function(callbackfn, thisArg) {
  // 处理数组类型异常
  if (this === null || this === undefined) {
    throw new TypeError("Cannot read property 'filter' of null or undefined");
  }
  // 处理回调类型异常
  if (Object.prototype.toString.call(callbackfn) != "[object Function]") {
    throw new TypeError(callbackfn + ' is not a function')
  }
  let O = Object(this);
  let len = O.length >>> 0;
  let resLen = 0;
  let res = [];
  for(let i = 0; i < len; i++) {
    if (i in O) {
      let element = O[i];
      if (callbackfn.call(thisArg, O[i], i, O)) {
        res[resLen++] = element;
      }
    }
  }
  return res;
}

MDN上所有测试用例亲测通过。MDN链接

更多相关文章推荐:

(建议收藏)原生JS知识系统整理

关注web前端开发的个人技术博客,分享前端经验和技巧
码云笔记 » 第十五篇 如何实现数组filter方法 ?

发表评论

提供最优质的资源集合

立即查看 了解详情