Array.prototype.map() ===================== .map()會將陣列裡的所有元素element迭代呼叫一遍,並帶入callback function產生新值後,回傳至新的陣列 ( 所以假如沒有要產生新的陣列,就不應使用`.map()`改為`.each()`、`.forEach()` ) 基本用法 -------- ``` let new_array = arr.map(function callback( currentValue[, index[, array]]) { // return element for new_array }[, thisArg]) ``` ### 參數 `callback` 呼叫 arr 所有元素的回呼函式。新數值會在每次執行 callback 時加到 new_array。 callback 函式可傳入以下三個參數: `currentValue` 原陣列目前所迭代處理中的元素。 `index`(選擇性) 原陣列目前所迭代處理中的元素之索引。 `array`(選擇性) 呼叫 map 方法的陣列。 `thisArg`(選擇性) 選擇性的參數。執行 callback 回呼函式的 this 值。 什麼時候不要用 map() ----------------- 因為 map 會建立新的陣列,如果在不想建立新陣列時使用該方法,就會變成**反模式(anti-pattern)**:這種情況下,要使用 forEach (en-US) 或 for-of (en-US)。 以下情況不應該使用 map; 1. 不使用回傳的新陣列, 2. 或/且不需要回傳新陣列。 callback 函式於被調用時會傳入三個參數:元素值、元素之索引、以及被迭代的陣列物件。 若有提供 thisArg 參數予 map 方法,thisArg 將會被當作回呼函式的 this 值,否則 this 會是 undefined (en-US)。callback 的最終 this 值是依據函式的 this 規則來決定。 **map 不會修改呼叫它的原始陣列(雖然在 callback 執行時有可能會這麼做)。** 由 map 方法所回傳之新陣列的範圍,於 callback 函式第一次被調用之前就已經被設定。而在呼叫 map 之後才加至原始陣列中的元素,將不會傳入 callback 當中。假如原始陣列中元素的值改變了,則 callback 得到此元素的值將會是 map 傳入元素當下的值。而在呼叫 map 之後、且於被 map 傳入 callback 之前就被刪除的原始陣列元素,並不會被 map 迭代到。 依據規範中定義的演算法,若呼叫 map 方法的原始陣列為一稀疏(sparse)陣列,則回傳的新陣列也會是在同樣索引中留空的稀疏陣列。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up