文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Javascript中Array扩展如何使用

2024-04-02 19:55

关注

这篇文章将为大家详细讲解有关Javascript中Array扩展如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Javascript中的Array扩展,一般都是从对象本身入手。这里我们将介绍一些Array对象中的一些东西,比如indexOf是返回元素在数组的索引,没有则返回-1等等。

最近看了一下developer.mozilla.org里的东西,发现它为Array扩展添加了不少generic method,赶得上Prototype的热心程度。

indexOf

返回元素在数组的索引,没有则返回-1。与string的indexOf方法差不多。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.indexOf = function(el, start) {       var startstart = start || 0;       for ( var i=0; i < this.length; ++i ) {           if ( this[i] === el ) {               return i;          }       }       return -1;   };  var array = [2, 5, 9];   var index = array.indexOf(2);   // index is 0   index = array.indexOf(7);   // index is -1

lastIndexOf

与string的lastIndexOf方法差不多。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.lastIndexOf = function(el, start) {       var startstart = start || this.length;       if ( start >= this.length ) {           start = this.length;       }      if ( start < 0 ) {            start = this.length + start;       }      for ( var i=start; i >= 0; --i ) {           if ( this[i] === el ) {             return i;         }      }       return -1;   };

forEach

各类库中都实现相似的each方法。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.forEach = function(fn, thisObj) {       var scope = thisObj || window;       for ( var i=0, j=this.length; i < j; ++i ) {           fn.call(scope, this[i], i, this);      }   };  function printElt(element, index, array) {       print("[" + index + "] is " + element); // assumes print is already defined   }   [2, 5, 9].forEach(printElt);   // Prints:   // [0] is 2   // [1] is 5   // [2] is 9

every

如果数组中的每个元素都能通过给定的函数的测试,则返回true,反之false。换言之给定的函数也一定要返回true与false

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.every = function(fn, thisObj) {      var scope = thisObj || window;       for ( var i=0, j=this.length; i < j; ++i ) {           if ( !fn.call(scope, this[i], i, this) ) {               return false;           }       }       return true;   };  function isBigEnough(element, index, array) {     return (element >= 10);   }   var passed = [12, 5, 8, 130, 44].every(isBigEnough);   console.log(passed)   // passed is false   passed = [12, 54, 18, 130, 44].every(isBigEnough);   // passed is true   console.log(passed)

some

类似every函数,但只要有一个通过给定函数的测试就返回true。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.some = function(fn, thisObj) {       var scope = thisObj || window;       for ( var i=0, j=this.length; i < j; ++i ) {           if ( fn.call(scope, this[i], i, this) ) {               return true;          }       }       return false;   };  function isBigEnough(element, index, array) {     return (element >= 10);   }   var passed = [2, 5, 8, 1, 4].some(isBigEnough);   // passed is false   passed = [12, 5, 8, 1, 4].some(isBigEnough);   // passed is true

filter

把符合条件的元素放到一个新数组中返回。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.filter = function(fn, thisObj) {       var scope = thisObj || window;      var a = [];       for ( var i=0, j=this.length; i < j; ++i ) {          if ( !fn.call(scope, this[i], i, this) ) {               continue;          }           a.push(this[i]);       }      return a;   };  function isBigEnough(element, index, array) {     return (element <= 10);   }   var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);

map

让数组中的每一个元素调用给定的函数,然后把得到的结果放到新数组中返回。。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.map = function(fn, thisObj) {       var scope = thisObj || window;       var a = [];      for ( var i=0, j=this.length; i < j; ++i ) {          a.push(fn.call(scope, this[i], i, this));       }       return a;   };  var numbers = [1, 4, 9];   var roots = numbers.map(Math.sqrt);   // roots is now [1, 2, 3]   // numbers is still [1, 4, 9]

reduce

让数组元素依次调用给定函数,***返回一个值,换言之给定函数一定要用返回值。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.reduce = function(fun )   {     var len = this.length >>> 0;    if (typeof fun != "function")       throw new TypeError();    if (len == 0 && arguments.length == 1)      throw new TypeError();    var i = 0;     if (arguments.length >= 2){       var rv = arguments[1];     } else{      do{        if (i in this){          rv = this[i++];           break;        }       if (++i >= len)           throw new TypeError();      }while (true);     }     for (; i < len; i++){      if (i in this)        rv = fun.call(null, rv, this[i], i, this);     }     return rv;   };  var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });   // total == 6

关于Javascript中Array扩展如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯