DEV Community

Rae Liu
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' ] ]; 
Enter fullscreen mode Exit fullscreen mode

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) } 
Enter fullscreen mode Exit fullscreen mode

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')) 
Enter fullscreen mode Exit fullscreen mode

3. Recursive Function?

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

Top comments (0)