Array Reduce Transformation | #2626 | LeetCode Solution

Author: neptune | 09th-Sep-2023
#JavaScript #LeetCode

Problem : Array Reduce Transformation | #2626 | LeetCode

Given an integer array `nums` and a reducer function `fn`, and an initial value `init`, return a reduced array.


A reduced array is created by applying the following operation: val = fn(init, nums[0]), val = fn(val, nums[1]), val = fn(val, nums[2]), ... until every element in the array has been processed. The final value of `val` is returned.

If the length of the array is `0`, it should return `nit`.


Please solve it without using the built-in `Array.reduce` method.


Example 1:

Input: nums = [1,2,3,4]

fn = function sum(accum, curr) { return accum + curr; }

init = 0

Output: 10

Explanation:

initially, the value is init=0.

(0) + nums[0] = 1

(1) + nums[1] = 3

(3) + nums[2] = 6

(6) + nums[3] = 10

The final answer is 10.


Example 2:

Input

nums = [1,2,3,4]

fn = function sum(accum, curr) { return accum + curr * curr; }

init = 100

Output: 130

Explanation:

initially, the value is init=100.

(100) + nums[0]^2 = 101

(101) + nums[1]^2 = 105

(105) + nums[2]^2 = 114

(114) + nums[3]^2 = 130

The final answer is 130.


Example 3:

Input: 

nums = []

fn = function sum(accum, curr) { return 0; }

init = 25

Output: 25

Explanation: For empty arrays, the answer is always init.


Solution:

     /**

     * @param {number[]} nums

     * @param {Function} fn

     * @param {number} init

     * @return {number}

     */

    var reduce = function (nums, fn, init) {

        var val = init;

        for (let i = 0; i < nums.length; i++) {

            val = fn(val, nums[i])

        }

        return val

    };



Explanation:

Let's break down the code step by step:


1. The code defines a function called `reduce`, which is similar in concept to JavaScript's built-in `Array.prototype.reduce` method. It takes three parameters:

   - `nums`: An array of numbers.

   - `fn`: A function that will be used to reduce the array.

   - `init`: An initial value that serves as the starting point for the reduction.


2. Inside the `reduce` function, a variable `value` is declared and initialised with the value of `init`. This variable will be used to accumulate the result of the reduction operation.


3. The function enters a `for` loop that iterates through each element of the input array `nums`. The loop is controlled by the variable `i`, which starts at 0 and goes up to the length of the array.


4. Inside the loop, the `fn` function is called with two arguments: the current value of `val` (which starts as `init`) and the current element of the array `nums[i]`. The purpose of this call is to allow the `fn` function to operate on the current value and element and return a new value that will become the updated value of `val`.


   - `val = fn(val, nums[i])`: This line assigns the result of `fn(val, nums[i])` back to `val`, effectively updating `val` with the result of the function call.


5. The loop continues to iterate through the array, and the `fn` function is applied iteratively to each element in the array, updating the `val` variable in each iteration.


6. After the loop has processed all elements in the input array `nums`, the `val` variable contains the result of the reduction operation.


7. Finally, the `val` variable, which now holds the reduced value, is returned as the result of the `reduce` function.


In summary, the `reduce` function takes an array, a reduction function (`fn`), and an initial value (`init`). It iterates through the array, applying the reduction function to each element and accumulating the result in the `val` variable. The final `val` value represents the result of reducing the array according to the logic defined in the `fn` function.






Related Blogs
Generate Fibonacci Sequence - JavaScript | Hackerank
Author: neptune | 07th-Apr-2023
#JavaScript #Hackerrank
Write a JavaScript function fibonacciSequence() to generate a FIbonacci sequence...

To Be Or Not To Be | #2704 | LeetCode Solution
Author: neptune | 03rd-Sep-2023
#JavaScript #LeetCode
Write a function that helps developers test their code. It should take in any value and return an object with the following two functions...

Apply Transform Over Each Element in Array | #2635 | LeetCode Solution
Author: neptune | 05th-Sep-2023
#JavaScript #LeetCode
Given an integer array `arr` and a mapping function `fn`, return a new array with a transformation applied to each element...

Function Composition | #2629 | LeetCode Solution
Author: neptune | 09th-Sep-2023
#JavaScript #LeetCode
Given an array of functions [f1, f2, f3, ..., fn], return a new function fn that is the function composition of the array of functions...

Counter | #2620 | LeetCode Solution
Author: neptune | 02nd-Sep-2023
#JavaScript #LeetCode
Given an integer n, return a counter function. This counter function returns n and then n + 1, n + 2, etc...

Chunk Array | #2677 | LeetCode Solution
Author: neptune | 19th-Sep-2023
#JavaScript #LeetCode
Given an array arr and a chunk `size`, return a `chunked` array...

Counter 2 | #2665 | LeetCode Solution
Author: neptune | 04th-Sep-2023
#JavaScript #LeetCode
Write function 'createCounter' It accept an initial integer 'init' It should return an object with three functions- increment() , decrement(), reset()...

Managing Virtual Environments in React JavaScript Projects
Author: neptune | 28th-Jun-2023
#JavaScript #React.js
Virtual environments are a valuable tool in React JavaScript projects as they allow developers to isolate dependencies, manage package versions, and maintain project consistency...

Add Two Promises | #2723 | LeetCode Solution
Author: neptune | 12th-Sep-2023
#JavaScript #LeetCode
Given two promises `promise1` and `promise2`, return a new `promise`. `promise1` and `promise2` will both resolve with a number...

Different ways to handle state in React applications
Author: neptune | 21st-Jun-2023
#JavaScript #React.js
This article explores different ways to manage states in React, including local component state, context API, and state management libraries like Redux...

Arrow Functions in JavaScript | ES6
Author: neptune | 26th-Mar-2023
#JavaScript #React.js
In this article, we will explore the syntax and usage of arrow functions in detail, along with some examples...

Filter Elements from Array | #2634 | LeetCode Solution
Author: neptune | 06th-Sep-2023
#JavaScript #LeetCode
Given an integer array `arr` and a filtering function `fn`, return a filtered array `filteredArr`...

Is Object Empty | #2727 | LeetCode | JavaScript Solution
Author: neptune | 01st-Sep-2023
#JavaScript #LeetCode
Given an object or an array, return if it is empty...

From REST to GraphQL: The Future of API Design
Author: neptune | 25th-Feb-2024
#JavaScript
Unlike traditional REST APIs, GraphQL provides a more flexible and intuitive approach to data querying and retrieval...

A Guide to Writing Clean, Readable, and Maintainable Code in JavaScript
Author: neptune | 23rd-Feb-2024
#JavaScript
By incorporating these principles into your coding practices, you contribute to creating code that is not only functional but also maintainable and easily understandable by your peers...

How I Built My Blogging Website Using React, Node.js, and Jamstack Architecture?
Author: neptune | 31st-Jul-2024
#JavaScript #API
Building a blogging website using React, Node.js, and Jamstack architecture was a rewarding experience...

How to Perform Unit Testing in React Components with Examples?
Author: neptune | 25th-Jul-2024
#JavaScript #React.js
Unit testing in React is an essential practice to ensure the reliability and robustness of your components...

Do you know ! How to manage State in Functional & Class Components in React ?
Author: neptune | 25th-Jul-2024
#JavaScript #React.js
State management in React has evolved significantly with the introduction of Hooks...

Why, What, and When: Understanding Jamstack?
Author: neptune | 05th-Jul-2024
#JavaScript #API
Jamstack represents a modern approach to web development that addresses many of the challenges faced by traditional architectures...

How to Get Started with Jamstack: A Comprehensive Guide?
Author: neptune | 05th-Jul-2024
#JavaScript #API
Getting started with Jamstack involves choosing the right tools, setting up a structured development environment...

View More