JavaScript Array扩展实现代码
JavaScript Array扩展实现代码
发布时间:2016-12-30 来源:查字典编辑
摘要:indexOf返回元素在数组的索引,没有则返回-1。与string的indexOf方法差不多。如果其他浏览器没有实现此方法,可以用以下代码实...

indexOf

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

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

复制代码 代码如下:

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

lastIndexOf

与string的lastIndexOf方法差不多。

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

复制代码 代码如下:

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;

};

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);

// passed is false

passed = [12, 54, 18, 130, 44].every(isBigEnough);

// passed is true

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;

};

<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]

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类