JavaScript Array擴(kuò)展實(shí)現(xiàn)代碼
更新時(shí)間:2009年10月14日 19:24:47 作者:
最近看了一下developer.mozilla.org里的東西,發(fā)現(xiàn)它為Array對(duì)象添加了不少generic method,趕得上Prototype的熱心程度。
indexOf
返回元素在數(shù)組的索引,沒(méi)有則返回-1。與string的indexOf方法差不多。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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方法差不多。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
各類(lèi)庫(kù)中都實(shí)現(xiàn)相似的each方法。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
如果數(shù)組中的每個(gè)元素都能通過(guò)給定的函數(shù)的測(cè)試,則返回true,反之false。換言之給定的函數(shù)也一定要返回true與false
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
類(lèi)似every函數(shù),但只要有一個(gè)通過(guò)給定函數(shù)的測(cè)試就返回true。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
把符合條件的元素放到一個(gè)新數(shù)組中返回。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
讓數(shù)組中的每一個(gè)元素調(diào)用給定的函數(shù),然后把得到的結(jié)果放到新數(shù)組中返回。。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
讓數(shù)組元素依次調(diào)用給定函數(shù),最后返回一個(gè)值,換言之給定函數(shù)一定要用返回值。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
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
返回元素在數(shù)組的索引,沒(méi)有則返回-1。與string的indexOf方法差不多。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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方法差不多。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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
各類(lèi)庫(kù)中都實(shí)現(xiàn)相似的each方法。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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
如果數(shù)組中的每個(gè)元素都能通過(guò)給定的函數(shù)的測(cè)試,則返回true,反之false。換言之給定的函數(shù)也一定要返回true與false
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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
類(lèi)似every函數(shù),但只要有一個(gè)通過(guò)給定函數(shù)的測(cè)試就返回true。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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
把符合條件的元素放到一個(gè)新數(shù)組中返回。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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
讓數(shù)組中的每一個(gè)元素調(diào)用給定的函數(shù),然后把得到的結(jié)果放到新數(shù)組中返回。。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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
讓數(shù)組元素依次調(diào)用給定函數(shù),最后返回一個(gè)值,換言之給定函數(shù)一定要用返回值。
如果其他瀏覽器沒(méi)有實(shí)現(xiàn)此方法,可以用以下代碼實(shí)現(xiàn)兼容:
復(fù)制代碼 代碼如下:
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;
};
復(fù)制代碼 代碼如下:
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
// total == 6
您可能感興趣的文章:
- javascript String 的擴(kuò)展方法集合
- Javascript String對(duì)象擴(kuò)展HTML編碼和解碼的方法
- Javascript string 擴(kuò)展庫(kù)代碼
- javascript Array數(shù)組對(duì)象的擴(kuò)展函數(shù)代碼
- 為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問(wèn)題探討及解決
- js Array對(duì)象的擴(kuò)展函數(shù)代碼
- JavaScript Array對(duì)象擴(kuò)展indexOf()方法
- JavaScript中擴(kuò)展Array contains方法實(shí)例
- 詳解JS中Array對(duì)象擴(kuò)展與String對(duì)象擴(kuò)展
相關(guān)文章
微信小程序 網(wǎng)絡(luò)通信實(shí)現(xiàn)詳解
這篇文章主要介紹了微信小程序 網(wǎng)絡(luò)通信實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07理解JavaScript中的適配器模式Adapter?Pattern
這篇文章主要介紹了理解JavaScript中的適配器模式,適配器模式即Adapter?Pattern,是作為兩個(gè)不兼容的接口之間的橋梁。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,下文更多相關(guān)介紹需要的小伙伴可以參考一下2022-04-04JS實(shí)現(xiàn)點(diǎn)擊文本框改變背景顏色
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)點(diǎn)擊文本框改變背景顏色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08js中字符串編碼函數(shù)escape()、encodeURI()、encodeURIComponent()區(qū)別詳解
JavaScript中有三個(gè)可以對(duì)字符串編碼的函數(shù),分別是: escape,encodeURI,encodeURIComponent,相應(yīng)3個(gè)解碼函數(shù):unescape,decodeURI,decodeURIComponent 。接下來(lái)通過(guò)本文給大家介紹三者之家的區(qū)別,感興趣的朋友一起學(xué)習(xí)吧2016-04-04簡(jiǎn)單的分頁(yè)代碼js實(shí)現(xiàn)
簡(jiǎn)單的分頁(yè)代碼js實(shí)現(xiàn),分享給大家,感興趣的小伙伴們可以參考一下2016-05-05axios的get請(qǐng)求傳入數(shù)組參數(shù)原理詳解
這篇文章主要為大家介紹了axios的get請(qǐng)求傳入數(shù)組參數(shù)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06