您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Javascript中Array擴展如何使用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Javascript中的Array擴展,一般都是從對象本身入手。這里我們將介紹一些Array對象中的一些東西,比如indexOf是返回元素在數組的索引,沒有則返回-1等等。
最近看了一下developer.mozilla.org里的東西,發現它為Array擴展添加了不少generic method,趕得上Prototype的熱心程度。
indexOf
返回元素在數組的索引,沒有則返回-1。與string的indexOf方法差不多。
如果其他瀏覽器沒有實現此方法,可以用以下代碼實現兼容:
Array.prototype.indexOf = function(el, start) { var startstart = 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.lastIndexOf = function(el, start) { var startstart = start || this.length; if ( start >= this.length ) { start = this.length; } if ( start < 0 ) { start = this.length + start; } for ( var i=start; i >= 0; --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); 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
關于Javascript中Array擴展如何使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。