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!

## Discussion (0)