源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript Array扩展实现代码

  • 时间:2020-07-26 15:00 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript Array扩展实现代码
[b]indexOf [/b] 返回元素在数组的索引,没有则返回-1。与string的indexOf方法差不多。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
Array.prototype.indexOf = function(el, start) {     var start = 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
[b]lastIndexOf[/b] 与string的lastIndexOf方法差不多。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
Array.prototype.indexOf = function(el, start) {     var start = start || 0;     for ( var i=0; i < this.length; ++i ) {         if ( this[i] === el ) {             return i;         }     }     return -1; };
[b]forEach[/b] 各类库中都实现相似的each方法。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
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
[b]every[/b] 如果数组中的每个元素都能通过给定的函数的测试,则返回true,反之false。换言之给定的函数也一定要返回true与false 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
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); // passed is false passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true
[b]some[/b] 类似every函数,但只要有一个通过给定函数的测试就返回true。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
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
[b]filter[/b] 把符合条件的元素放到一个新数组中返回。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
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);
[b]map[/b] 让数组中的每一个元素调用给定的函数,然后把得到的结果放到新数组中返回。。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
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; }; <div id="highlighter_240589"> var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); // roots is now [1, 2, 3] // numbers is still [1, 4, 9]
[b]reduce[/b] 让数组元素依次调用给定函数,最后返回一个值,换言之给定函数一定要用返回值。 如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
[u]复制代码[/u] 代码如下:
Array.prototype.reduce = function(fun /*, initial*/) {   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; };
[u]复制代码[/u] 代码如下:
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; }); // total == 6
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部