jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
const ellipsis = '...';
const generatePaginationArray = (pageNumber, totalPages) => {
const pages = [1];
let rangeStart = Math.max(2, pageNumber - 1);
let rangeEnd = totalPages <= 4 ? totalPages - 1 : Math.min(totalPages - 1, pageNumber + 1);
if (pageNumber === 2) {
rangeEnd = Math.min(3, totalPages - 1);
}
if (pageNumber === totalPages - 1) {
rangeStart = Math.max(totalPages - 3, 2);
}
// Add start of range or ellipsis
if (rangeStart > 3 || (rangeStart === 3 && pageNumber === 5)) {
pages.push(ellipsis);
if (rangeStart >= totalPages - 3 && pageNumber - 1 > rangeStart) {
rangeStart++;
}
} else if (rangeStart === 3) {
pages.push(2);
}
// Add range of pages
for (let i = rangeStart; i <= rangeEnd; i++) {
pages.push(i);
}
// Add end of range or ellipsis
if (rangeEnd < totalPages - 1) {
const withinSightOfEnd = (rangeEnd === totalPages - 2);
pages.push(withinSightOfEnd ? totalPages - 1 : ellipsis);
}
// Always add the last page if more than one page
if (totalPages > 1) {
pages.push(totalPages);
}
return pages;
};
const ELLIPSIS_MARKER = '...';
const generatePaginationArray2 = (pageNumber, totalPages, ellipsis = ELLIPSIS_MARKER) => {
const pages = [];
for (let i = 1; i <= totalPages; i++) {
const firstOrLast = (i === 1 || i === totalPages);
const prevNextOrCurrent = (i >= pageNumber - 1 && i <= pageNumber + 1);
const nearStart = (i === 2 && pageNumber <= 4);
const nearEnd = (i === totalPages - 1 && pageNumber >= totalPages - 3);
if (firstOrLast || prevNextOrCurrent || nearStart || nearEnd) {
pages.push(i);
} else if (pages[pages.length - 1] !== ellipsis) { // prevent multiple ellipsis in a row
pages.push(ellipsis);
}
}
return pages;
};
Ready to run.
Test | Ops/sec | |
---|---|---|
ranged |
| ready |
full loop |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.