DEV Community is a community of 782,260 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Rae Liu

Posted on

2D array peak - JS (reduce function)

I have taken couple days to learn what is Reduce, UseReducer functions (JS, React) so I was thinking maybe I can find something fun to code.

No small chat, here is the question -

``````2-D Peak Finding

- c - - -
c - e - z
- r s u x
- r - a z

In the 2d array depicted above, a is a peak, if a >= b, a >= d, a >= e, a >= c, find the peak array.

Output should be 'a'

var arr = [ [ '', 'c', '', '',''],
[ 'c', '', 'e', '','z' ],
[ '', 'r', 's', 'u', 'b' ],
[ '', 'h', '', 'a','z' ] ];
``````

1. How to compare

`'a'>'b' === false` , `'b' > 'a' === true`

2. Loop

We split the matrix row by row, and then find the peak for each row.
We know the min is `z`

``````console.log(array.reduce(findPeak, 'z'));

//split row by row
const findPeak = (currPeak, currRow) =>{
//currRow is still an array
//So use reduce function again
//currRow.reduce(findPeakPerRow, 'z')
}

const findPeakPerRow = (currPeak, currEle) =>{
//Compare currPeak and CurrEle
}
//compare function
const getMaxValue = (currPeak, currValue) => {
//if currValue is not an array, then find the max value
return (currValue && currValue < currPeak ? currValue : currPeak)
}
``````

Full Codes -

``````const findPeak = (currPeak, currRow) =>{
let currValue = currRow.reduce(findPeakPerRow, 'z');
return (getMaxValue(currPeak, currValue));
}

const findPeakPerRow = (maxValue, currValue) => {
return (getMaxValue(maxValue, currValue));
}

const getMaxValue = (currPeak, currValue) => {
return (currValue && currValue < currPeak ? currValue : currPeak)
}

console.log(arr.reduce(findPeak, 'z'))
``````

3. Recursive Function?

Not sure if we can convert those to recursive functions...
Feel free to comment any ideas!