We have the following array of named breakpoints.
interface Breakpoint {
name: string;
width: number;
}
const MEDIA_BREAKPOINTS:Breakpoint[] = [
{
name: 'l',
width: 0
},
{
name: 'sm',
width: 400
},
{
name: 'md',
width: 576
},
{
name: 'lg',
width: 768
},
{
name: 'xl',
width: 992
}
]
We want the find the breakpoint corresponding to a given width.
Approach
We iterate over the MEDIA_BREAKPOINTS using find and if we find a breakpoint with a width that is greater than the current breakpoint and less than the width of the next breakpoint we return it.
Also if the width argument is greater than the width of the current breakpoint, and there are not more breakpoints left, we also return the breakpoint.
If there is no match we return undefined.
function findBreakpoint(width: number): Breakpoint | undefined {
return breakpoints.find( ( p: Breakpoint, index: number ) => {
const next = breakpoints[index + 1]
return width >= p.width
&& (!next || width < next.width);
}) || undefined;
}