The line of code in quesion:
let largest = arr.reduce((a,v,i) => v > a[1] ? [i,v] : a, [-1,0]);
I am confused mainly by this part a, [-1,0]
, I don't understand this syntax. What is a
doing before a comma?
To find the position of an element in an array, you use the indexOf() method. This method returns the index of the first occurrence the element that you want to find, or -1 if the element is not found. The following illustrates the syntax of the indexOf() method.
To find the largest element, the first two elements of array are checked and the largest of these two elements are placed in arr[0] the first and third elements are checked and largest of these two elements is placed in arr[0] . this process continues until the first and last elements are checked.
max() The Math. max() function returns the largest of the numbers given as input parameters, or - Infinity if there are no parameters.
const reducer = (accumulator, currentValue, index) => {
if (currentValue > accumulator[1]) {
return([index, currentValue])
} else {
return(accumulator)
}
}
let largest = accumulator.reduce(reducer, [-1, 0])
Array.prototype.reduce()
has two arguments, the callback function and the initial value. That's where the [-1, 0]
is coming from, that's the "initial value" that will be passed as the "accumulator" to the callback function on the first iteration.
The shortest shorthand for a function in javascript is () => value
where "value" represents the return value of the function—no parenthesis are required. In this example that return value is a ternary statement: condition ? return if true : return if false
. Essentially, because they're using a single line to produce a single value, there's no parenthesis or braces required around the function (which ends at the a
).
The callback function you pass to Array.reduce()
can take three arguments, (accumulator, currentValue, index)
.
The key here is in the initial value, which is [index, value]
, which keeps track of both until iteration is finished, in which case just the final value is returned.
The array that comes after the comma is a second argument to .reduce()
. The code there is equivalent to
let largest = arr.reduce(
(a,v,i) => {
return v > a[1] ? [i,v] : a;
},
[-1,0] // second argument
);
On very iteration, the accumulator is an array composed of 2 values. The value returned from the callback becomes the new accumulator in the next iteration. The value returned on the last iteration becomes the result of the whole .reduce()
expression - the largest
.
So what return v > a[1] ? [i,v] : a;
does inside a .reduce()
callback is it'll go through the array and find the item with the highest v
- once the [i, v]
of that becomes the accumulator, the accumulator will stay as that array until iteration finishes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With