首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

详解JavaScript中的Array扩充

2012-11-05 
详解JavaScript中的Array扩展} ?[2, 5, 9].forEach(printElt) ?// Prints: ?// [0] is 2 ?// [1] is 5 ?/

详解JavaScript中的Array扩展
} ?
[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 /*, 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;? ?
    };?
    var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; }); ?
    // total == 6

热点排行
Bad Request.