正文
map,必要解釋就是map不是地圖的意思,而是映射的意思。
這里就簡單的介紹了這個map了。
array.map(callback,[ thisObject]);
看下這個案例后,我們發現了就發現了一個問題。
以前呢,我寫道:map是一個過濾器,其實是將filter弄混了,當然我也介紹過filter。
那么什么是映射呢?
這個時候數學似乎顯得非常重要了,來看下定義:
兩個非空集合A與B間存在着對應關系f,而且對於A中的每一個元素x,B中總有有唯一的一個元素y與它對應,就這種對應為從A到B的映射,記作f:A→B。其中,b稱為元素a在映射f下的象,記作:b=f(a)。a稱為b關於映射f的原象。
集合A中所有元素的象的集合稱為映射f的值域,記作f(A)。
映射,或者射影,在數學及相關的領域還用於定義函數。函數是從非空數集到非空數集的映射,而且只能是一對一映射或多對一映射。
ok,這下明白了吧。
在實際使用的時候,我們可以利用map方法方便獲得對象數組中的特定屬性值們。例如下面這個例子(之后的兼容demo也是該例子):
var users = [
{name: "張含韻", "email": "zhang@email.com"},
{name: "江一燕", "email": "jiang@email.com"},
{name: "李小璐", "email": "li@email.com"}
];
var emails = users.map(function (user) { return user.email; });
console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com
Array.prototype擴展可以讓IE6-IE8瀏覽器也支持map方法:
if (typeof Array.prototype.map != "function") {
Array.prototype.map = function (fn, context) {
var arr = [];
if (typeof fn === "function") {
for (var k = 0, length = this.length; k < length; k++) {
arr.push(fn.call(context, this[k], k, this));
}
}
return arr;
};
}