JS(ES5) 实现数组方法(迭代类型:evey、some、map、filter)的重构

代码 代码 1353 人阅读 | 0 人回复

<
重构前要了解那些办法的要干吗、无能嘛,另有大白传进每一个参数有甚么用。
数组挪用evey、some、map、filter办法中,传进的第一个参数是回调函数(必挖),第两个参数是一个工具(可挖、可没有挖),感化是改动第一个参数里的回调函数this指背为那个工具。
1.重构办法之every

  1. Array.prototype.myEvery = function (fun, obj) {
  2.     for (var i = 0; i < this.length; i++) {
  3.         if (!(obj ? fun.bind(obj)(this[i], i, this) : fun(this[i], i, this))) {
  4.             return false;
  5.         }
  6.     }
  7.     return true;
  8. }
  9. var arr = [1, 2, 3, 4, 5]
  10. var result = arr.myEvery(function (item, index, arr) {
  11.     console.log(this);   // 输出 { name: &#39;zhangsan&#39; }
  12.     // 假如出挖第两个参数({ name: &#39;zhangsan&#39; }) 正在node情况下输出 global,阅读器情况输出 window
  13.     // 假如挖了第两个参数 this便会指背那个工具 即当前为{ name: &#39;zhangsan&#39; }
  14.     return item > 0;
  15. }, { name: &#39;zhangsan&#39; })//那里挖了第两个参数,改动了第一个参数回调函数的this指背
  16. console.log(result);  //  输出 true  由于数组每一个元素皆年夜于0
复造代码
2.重构办法之some

  1. Array.prototype.mySome = function (fun, obj) {
  2.     for (var i = 0; i < this.length; i++) {
  3.         if (obj ? fun.bind(obj)(this[i], i, this) : fun(this[i], i, this)) {
  4.             return true;
  5.         }
  6.     }
  7.     return false;
  8. }
  9. var arr = [1, 2, 3, 4, 5]
  10. var result = arr.mySome(function (item, index, arr) {
  11.     console.log(this);  //输出 { name: &#39;zhangsan&#39; }
  12.     return item > 5;
  13. }, { name: &#39;zhangsan&#39; })
  14. console.log(result);    //输出 false  由于数组中出有元素年夜于5
复造代码
3.重构办法之map

  1. Array.prototype.myMap = function (fun, obj) {
  2.     var result = []
  3.     for (var i = 0; i < this.length; i++) {
  4.         result[i] = obj ? fun.bind(obj)(this[i], i, this) : fun(this[i], i, this)
  5.     }
  6.     return result
  7. }
  8. var arr = [1, 2, 3, 4, 5];
  9. var result = arr.myMap(function (item, index, arr) {
  10.     console.log(this);  //输出  { name: &#39;zhangsan&#39; }
  11.     return item * 2;
  12. }, { name: &#39;zhangsan&#39; })
  13. console.log(result);    //输出  [ 2, 4, 6, 8, 10 ]
复造代码
4.重构办法之filter

  1. Array.prototype.myFilter = function (fun, obj) {
  2.     var result = []
  3.     for (var i = 0; i < this.length; i++) {
  4.         if (obj ? fun.bind(obj)(this[i], i, this) : fun(this[i], i, this)) {
  5.             result.push(this[i])
  6.         }
  7.     }
  8.     return result;
  9. }
  10. var arr = [1, 2, 3, 4, 5];
  11. var result = arr.myFilter(function (item, index, arr) {
  12.     console.log(this);   // 输出 { name: &#39;zhangsna&#39; }
  13.     return item > 2;
  14. }, { name: &#39;zhangsna&#39; })
  15. console.log(result);     //输出 [ 3, 4, 5 ]
复造代码


免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则