map函數的使用技巧

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]

map函數的使用例子

求數組中每一個元素的平方根

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
/* roots的值爲[1, 2, 3], numbers的值仍爲[1, 4, 9] */

querySelectorAll 應用

下面代碼展現瞭如何去遍歷用 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;
  };      
}
相關文章
相關標籤/搜索