codewars 5 kyu PaginationHelper
我的题解
构造函数并完成方法。
// TODO: complete this object/class
// The constructor takes in an array of items and a integer indicating how many
// items fit within a single page
function PaginationHelper(collection, itemsPerPage) {
this.collection = collection;
this.itemsPerPage = itemsPerPage;
}
// returns the number of items within the entire collection
PaginationHelper.prototype.itemCount = function () {
return this.collection.length;
};
// returns the number of pages
PaginationHelper.prototype.pageCount = function () {
return Math.ceil(this.collection.length / this.itemsPerPage);
};
// returns the number of items on the current page. page_index is zero based.
// this method should return -1 for pageIndex values that are out of range
PaginationHelper.prototype.pageItemCount = function (pageIndex) {
// console.log(pageIndex,this.collection,this.itemsPerPages)
if (pageIndex > this.pageCount() - 1) {
return -1;
} else if (pageIndex == this.pageCount() - 1) {
return this.collection.length % this.itemsPerPage;
} else {
return this.itemsPerPage;
}
};
// determines what page an item is on. Zero based indexes
// this method should return -1 for itemIndex values that are out of range
PaginationHelper.prototype.pageIndex = function (itemIndex) {
if (!this.collection.length) {
return -1;
} else if (itemIndex > this.collection.length || itemIndex < 0) {
return -1;
} else {
return Math.floor(itemIndex / this.itemsPerPage);
}
};
优秀题解
class PaginationHelper {
constructor(a, p) {
Object.assign(this, { a, p });
}
itemCount() {
return this.a.length;
}
pageCount() {
return -~(this.a.length / this.p);
}
pageItemCount(i) {
return i < this.pageCount()
? (i + 1) * this.p <= this.itemCount()
? this.p
: this.itemCount() % this.p
: -1;
}
pageIndex(i) {
return i < 0 || i >= this.itemCount() ? -1 : (i / this.p) | 0;
}
}
function PaginationHelper(collection, itemsPerPage) {
this.collection = collection, this.len = this.collection.length, this.ipp = itemsPerPage;
}
PaginationHelper.prototype.itemCount = function() {return this.len;}
PaginationHelper.prototype.pageCount = function() {return Math.ceil(this.len / this.ipp);}
PaginationHelper.prototype.pageItemCount = function(pageIndex) {
var pc = this.pageCount();
return pc <= pageIndex || pageIndex < 0 ? -1 : pc - 1 == pageIndex ? this.len % this.ipp : this.ipp;
}
PaginationHelper.prototype.pageIndex = function(itemIndex) {
return this.len <= itemIndex || itemIndex < 0 ? -1 : Math.floor(itemIndex / this.ipp);
总结
学到了 JS 的函数写法,以及函数的声明、调用。