I need to render a list of names alphabetically and grouped by the starting letter of each name. It should look like this:
**A** Anders Anton Angela **B** Brian Bernard **C** Carl
My current solution can sort all the names that is contained within an object, but I am having trouble adding the starting letter as an element before the names (e.g. rendering ‘A’ above ‘Anders’ and ‘B’ above ‘Brian’)
Current solution:
completeEmpList = empList .sort((a, b) => a.Name.localeCompare(b.Name)) .map((emp) => ( <div> {emp.Name} </div> ))
It is not supposed to handle data of more than a max of 300 elements, so optimization is not that important in this case.
Advertisement
Answer
With a bit of guidance from the comments, I made it work with this code:
let previousChar = '' if (empList) { completeEmpList = empList .sort((a, b) => a.Name.localeCompare(b.Name)) .map((emp) => { if (emp.Name.charAt(0) !== previousChar) { previousChar = emp.Name.charAt(0) return ( <div> <div className='charElement' key={'c' + emp.Id}> emp.Name.charAt(0)}</div> </div> <div> <div className='empName'>{emp.Name}</div> </div> ) } else { return ( <div className='empName'>{emp.Name}</div> ) } })