今天要來嘗試的是,如何不用好用的Array.map
方法,來實現 Array.map
的功能。
Array.map
map()
方法會建立一個新的陣列,其內容為原陣列的每一個元素經由回呼函式運算後所回傳的結果之集合。
簡單來說就是把陣列內的每一個值,個別跑函式,把新的值回傳出成新的陣列,並不會取代原本的陣列。舉例來說:
let A = [1, 2, 3]
let B = A.map( function(n) {
return n*2
})
console.log(B) // [ 2, 4, 6 ]
(類似的 .forEach()
則是修改原有的陣列,並且不會輸出新的值)
Given an integer array arr
and a mapping function fn
, return a new array with a transformation applied to each element.
The returned array should be created such that returnedArray[i] = fn(arr[i], i)
.
Please solve it without the built-in Array.map
method.
Example 1:
Input: arr = [1,2,3], fn = function plusone(n) { return n + 1; }
Output: [2,3,4]
Explanation:
const newArray = map(arr, plusone); // [2,3,4]
The function increases each value in the array by one.
Example 2:
Input: arr = [1,2,3], fn = function plusI(n, i) { return n + i; }
Output: [1,3,5]
Explanation: The function increases each value by the index it resides in.
Example 3:
Input: arr = [10,20,30], fn = function constant() { return 42; }
Output: [42,42,42]
Explanation: The function always returns 42.
首先我們要設計一個函式 map,讓可以接受題目的 arr 跟 fn
function map(arr, fn){
}
因為題目要我們回傳一個新的陣列,所以在 function 內部要先創建一個空的陣列 returnedArray
來儲存結果
已經做過很多練習的我們,可以很快寫出如何在陣列的數量底下,重複跑程式的迴圈
function map(arr, fn) {
let returnedArray=[]
for (let i = 0; i < arr.length; i++) {}
接著,我們該如何讓 arr 跑過 fn 函式並添加到 returnedArray ,我們可以直接照著題目的描述:
function map(arr, fn) {
let returnedArray = [];
for (let i = 0; i < arr.length; i++) {
returnedArray[i] = (fn(arr[i], i));
}
return returnedArray;
}
完成!