2635. Apply Transform Over Each Element in Array

更新於 發佈於 閱讀時間約 3 分鐘

今天要來嘗試的是,如何不用好用的Array.map 方法,來實現 Array.map 的功能。

What is 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;
}

完成!


留言
avatar-img
留言分享你的想法!
avatar-img
高的沙龍
0會員
5內容數
高的沙龍的其他內容
2024/03/16
(略),array 是用來將陣列的值進行累加,我們來看看怎麼怎麼達成吧: Given an integer array nums, a reducer function fn, and an initial value init, return the final result obtained
2024/03/16
(略),array 是用來將陣列的值進行累加,我們來看看怎麼怎麼達成吧: Given an integer array nums, a reducer function fn, and an initial value init, return the final result obtained
看更多