js的Array數組對象中有不少有用的方法,js的map函數在某些方面很是的方便強大。git
map() 方法建立一個新數組,其結果是該數組中的每一個元素都調用一個提供的函數後返回的結果。github
let numbers = [1, 5, 10, 15]; let roots = numbers.map((x) => { return x * 2; }); let roots = numbers.map( x => x * 2); // roots is now [2, 10, 20, 30] // numbers is still [1, 5, 10, 15] let numbers = [1, 4, 9]; // let roots = numbers.map(Math.sqrt); let roots = numbers.map(function(x){ return Math.sqrt(x); }); // roots is now [1, 2, 3] // numbers is still [1, 4, 9]
var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); /* roots的值爲[1, 2, 3], numbers的值仍爲[1, 4, 9] */
下面代碼展現瞭如何去遍歷用 querySelectorAll 獲得的動態對象集合。在這裏,咱們得到了文檔裏全部選中的選項,並將其打印:數組
var elems = document.querySelectorAll('select option:checked'); var values = Array.prototype.map.call(elems, function(obj) { return obj.value; });
var str = '12345'; Array.prototype.map.call(str, function(x) { return x; }).reverse().join(''); // Output: '54321' // Bonus: use '===' to test if original string was a palindrome
// 實現 ECMA-262, Edition 5, 15.4.4.19 // 參考: http://es5.github.com/#x15.4.4.19 if (!Array.prototype.map) { Array.prototype.map = function(callback, thisArg) { var T, A, k; if (this == null) { throw new TypeError(" this is null or not defined"); } // 1. 將O賦值爲調用map方法的數組. var O = Object(this); // 2.將len賦值爲數組O的長度. var len = O.length >>> 0; // 3.若是callback不是函數,則拋出TypeError異常. if (Object.prototype.toString.call(callback) != "[object Function]") { throw new TypeError(callback + " is not a function"); } // 4. 若是參數thisArg有值,則將T賦值爲thisArg;不然T爲undefined. if (thisArg) { T = thisArg; } // 5. 建立新數組A,長度爲原數組O長度len A = new Array(len); // 6. 將k賦值爲0 k = 0; // 7. 當 k < len 時,執行循環. while(k < len) { var kValue, mappedValue; //遍歷O,k爲原數組索引 if (k in O) { //kValue爲索引k對應的值. kValue = O[ k ]; // 執行callback,this指向T,參數有三個.分別是kValue:值,k:索引,O:原數組. mappedValue = callback.call(T, kValue, k, O); // 返回值添加到新數組A中. A[ k ] = mappedValue; } // k自增1 k++; } // 8. 返回新數組A return A; }; }