LeetCode JavaScript 30 Days Challenge – Day4 – 2635. Apply Transform Over Each Element in Array

    LeetCode JavaScript 30 Days ChallengeLeetCode Js-Array

    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.

    給予一個整數陣列 arr 和一個映射函數 fn,回傳一個對每個元素運算轉換的新陣列。
    回傳的陣列應該要建立一個新的 returnedArray[i] = fn(arr[i], i)。
    
    請不要使用 Array.map 方法來解決問題。
    

    Example 1:

    Input: arr = [1,2,3], fn = function plusone(n) { return n + 1; }
    Output: [2,3,4]
    

    Example 2:

    Input: arr = [1,2,3], fn = function plusI(n, i) { return n + i; }
    Output: [1,3,5]
    

    Example 3:

    Input: arr = [10,20,30], fn = function constant() { return 42; }
    Output: [42,42,42]
    

    solution:
    因題目希望我們不要使用 map() 的方法,同時又希望回傳的是一個新的陣列,
    所以這部分我們先宣告一個空陣列叫做 res,接著我們運用 forEach((num, index)) 的方式,
    將題目給的 arr 中所有的 element 的數值 num 與位置 index,依序放入 fn(num, index)中做運算,
    且同步放入到新的陣列 res 中,最後回傳結果。

    Code 1: BigO(n)

    var map = function(arr, fn) {
        const res = []
        
        arr.forEach((num, index) => {
            res.push(fn(num, index))
        })
        return res;
    };
    

    FlowChart:
    Example 1

    Input: arr = [1,2,3], fn = function plusone(n) { return n + 1; }
    
    fn(num)
    fn(1) 1 + 1 = 2 res.push(2) //res = [2]
    fn(2) 2 + 1 = 3 res.push(3) //res = [2, 3]
    fn(3) 3 + 1 = 4 res.push(4) //res = [2, 3, 4]
    

    Example 2

    Input: arr = [1,2,3], fn = function plusI(n, i) { return n + i; }
    
    fn(num, index)
    fn(1, 0) 1 + 0 = 1 res.push(1) //res = [1]
    fn(2, 1) 2 + 1 = 3 res.push(3) //res = [1, 3]
    fn(3, 2) 3 + 2 = 5 res.push(5) //res = [1, 3, 5]
    

    Example 3

    Input: arr = [10,20,30], fn = function constant() { return 42; }
    
    fn(num)
    fn(1) return 42 res.push(42) //res = [42]
    fn(2) return 42 res.push(42) //res = [42, 42]
    fn(3) return 42 res.push(42) //res = [42, 42, 42]