详解JavaScript中的Array扩充
详解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