Skip to content

Instantly share code, notes, and snippets.

@henriklindgren
Forked from kottenator/simple-pagination.js
Last active August 12, 2022 14:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save henriklindgren/c244daf73050ed85f08b7f51405d7cf4 to your computer and use it in GitHub Desktop.
Save henriklindgren/c244daf73050ed85f08b7f51405d7cf4 to your computer and use it in GitHub Desktop.
Simple pagination algorithm
function pagination(c, m) {
var current = c,
last = m,
delta = 2,
range = [],
previous = 1;
range.push(1);
for (var i = 2; i < last; i++) {
if (i < current && current - i === delta){
range.push('...');
range.splice(1, i - 2)
} else if (i > current && i - current === delta){
range.push('...');
break;
} else {
range.push(i);
}
}
range.push(last);
return range;
}
/*
Test it:
for (let i = 1, l = 20; i <= l; i++)
console.log(`Selected page ${i}:`, pagination(i, l));
Expected output:
Selected page 1: [1, 2, 3, "...", 20]
Selected page 2: [1, 2, 3, 4, "...", 20]
Selected page 3: [1, 2, 3, 4, 5, "...", 20]
Selected page 4: [1, 2, 3, 4, 5, 6, "...", 20]
Selected page 5: [1, 2, 3, 4, 5, 6, 7, "...", 20]
Selected page 6: [1, "...", 4, 5, 6, 7, 8, "...", 20]
Selected page 7: [1, "...", 5, 6, 7, 8, 9, "...", 20]
Selected page 8: [1, "...", 6, 7, 8, 9, 10, "...", 20]
Selected page 9: [1, "...", 7, 8, 9, 10, 11, "...", 20]
Selected page 10: [1, "...", 8, 9, 10, 11, 12, "...", 20]
Selected page 11: [1, "...", 9, 10, 11, 12, 13, "...", 20]
Selected page 12: [1, "...", 10, 11, 12, 13, 14, "...", 20]
Selected page 13: [1, "...", 11, 12, 13, 14, 15, "...", 20]
Selected page 14: [1, "...", 12, 13, 14, 15, 16, "...", 20]
Selected page 15: [1, "...", 13, 14, 15, 16, 17, "...", 20]
Selected page 16: [1, "...", 14, 15, 16, 17, 18, 19, 20]
Selected page 17: [1, "...", 15, 16, 17, 18, 19, 20]
Selected page 18: [1, "...", 16, 17, 18, 19, 20]
Selected page 19: [1, "...", 17, 18, 19, 20]
Selected page 20: [1, "...", 18, 19, 20]
*/
@henriklindgren
Copy link
Author

henriklindgren commented Nov 18, 2019

Easier to read and loops one less time

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment