Edit in JSFiddle

(function() {
    'use strict';
    ko.extenders.paging = function(target, pageSize) {
        var _pageSize = ko.observable(pageSize || 10),
            // default pageSize to 10
            _currentPage = ko.observable(1); // default current page to 1
        target.pageSize = ko.computed({
            read: _pageSize,
            write: function(newValue) {
                if (newValue > 0) {
                    _pageSize(newValue);
                }
                else {
                    _pageSize(10);
                }
            }
        });

        target.currentPage = ko.computed({
            read: _currentPage,
            write: function(newValue) {
                if (newValue > target.pageCount()) {
                    _currentPage(target.pageCount());
                }
                else if (newValue <= 0) {
                    _currentPage(1);
                }
                else {
                    _currentPage(newValue);
                }
            }
        });

        target.pageCount = ko.computed(function() {
            return Math.ceil(target().length / target.pageSize()) || 1;
        });

        target.currentPageData = ko.computed(function() {
            var pageSize = _pageSize(),
                pageIndex = _currentPage(),
                startIndex = pageSize * (pageIndex - 1),
                endIndex = pageSize * pageIndex;

            return target().slice(startIndex, endIndex);
        });

        target.moveFirst = function() {
            target.currentPage(1);
        };
        target.movePrevious = function() {
            target.currentPage(target.currentPage() - 1);
        };
        target.moveNext = function() {
            target.currentPage(target.currentPage() + 1);
        };
        target.moveLast = function() {
            target.currentPage(target.pageCount());
        };

        return target;
    };
}());
/// -- End paging extender -- \\\

/// Sample View Model that has an observableArray extended with the paging extender
var ViewModel = function() {
    this.items = ko.observableArray([{
        value: '1'},
    {
        value: '2'},
    {
        value: '3'},
    {
        value: '4'},
    {
        value: '5'},
    {
        value: '6'},
    {
        value: '7'},
    {
        value: '8'},
    {
        value: '9'},
    {
        value: '10'},
    {
        value: '11'},
    {
        value: '12'},
    {
        value: '13'}]).extend({
        paging: 5
    });
};


ko.applyBindings(new ViewModel());
<div style="float:left; border: 1px solid black;">
    Paged Array
    <ul data-bind="foreach : items.currentPageData">
        <li data-bind="text: value"></li>
    </ul>
</div>
<div style="float:left; border: 1px solid blue; margin-left: 20px; margin-bottom: 5px;">
    Original Array
    <ul data-bind="foreach: items">
        <li data-bind="text: value"></li>
    </ul>
</div>
<div style="clear: both"></div>
<a href="#" data-bind="click: items.moveFirst">First</a>
<a href="#" data-bind="click: items.movePrevious">Previous</a>
<a href="#" data-bind="click: items.moveNext">Next</a>
<a href="#" data-bind="click: items.moveLast">Last</a>

Page    
<input type="number" data-bind="value: items.currentPage, attr: { 'max': items.pageCount }" min="1">
    of <span data-bind="text: items.pageCount"></span>

    
body { font-family: arial; }
div { padding: 4px;

External resources loaded into this fiddle: