在 JavaScript 1.6 裏,javascript 數組增長了幾個很是有用的方法:indexOf、lastIndexOf、every、 filter、 forEach、 map、 some,其中前兩個能夠歸爲元素定位方法,然後面的幾個則能夠歸爲迭代(iterative)方法。
javascript
遺憾的是:這些新方法並不是全部瀏覽器都支持,在這種狀況下,咱們就須要本身動手了,在這些介紹的文章中,咱們同時提供了在不支持這些新特性的瀏覽器中的實現方法。java
原生方法以下:數組
var mappedArray = array.map(callback[, thisObject]);
對數組中的每一個元素都執行一次指定的函數(callback),而且以每次返回的結果爲元素建立一個新數組。它只對數組中的非空元素執行指定的函數,沒有賦值或者已經刪除的元素將被忽略。瀏覽器
回調函數能夠有三個參數:當前元素,當前元素的索引和當前的數組對象。如參數 thisObject 被傳遞進來,它將被當作回調函數(callback)內部的 this 對象,若是沒有傳遞或者爲null,那麼將會使用全局對象。app
map 不會改變原有數組,記住:只有在回調函數執行前傳入的數組元素纔有效,在回調函數開始執行後才添加的元素將被忽略,而在回調函數開始執行到最後一個元素這一期間,數組元素被刪除或者被更改的,將以回調函數訪問到該元素的時間爲準,被刪除的元素將被忽略。函數
若是瀏覽器不支持map方法,也能夠按照下面的方式用prototype去擴展:this
<script type="text/javascript"> //擴展原型對象 Array.prototype.map = function(fn){ var a = []; for(var i = 0; i < this.length; i++){ var value = fn(this[i], i); if(value == null){ continue; //若是函數fn返回null,則從數組中刪除該項 } a.push(value); } return a; }; //例子,arr爲原始數組 var arr = [ {name: 'gonn', age: 20, sex: '1', No: '274200'}, {name: 'nowamagic', age: 30, sex: '0', No: '274011'}, {name: 'frie', age: 40, sex: '1', No: '274212'} ]; //使用map更改數組每項的值,可對數組每一項元素內部進行增刪改,也能夠經過return null來刪除數組的某項 var arr2 = arr.map(function(item, i){ item.sex = item.sex == '0' ? '女' : '男'; if(item.name == 'tom'){ return null; //刪除name爲tom的項 } return { index: i, name: item.name, age: item.age + 30 + i, sex: item.sex }; }); console.log(arr2); </script>
在Firefox firebug控制檯輸出:prototype
[ Object { index=0, name="gonn", age=50, 更多...}, Object { index=1, name="nowamagic", age=61, 更多...}, Object { index=2, name="frie", age=72, 更多...} ]
或者如下方式擴展也能夠:對象
if (!Array.prototype.map) { Array.prototype.map = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new TypeError(); var res = new Array(len); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) res[i] = fun.call(thisp, this[i], i, this); } return res; }; }
Happy Coding.索引