AngularJS Example

HTML

<div ng-app="app">
    <div ng-controller="MainController">
        <select data-ng-model="numColumns" data-ng-options="columnValue as columnValue for columnValue in columnValues"></select>
        <table border="1">
            <tr data-ng-repeat="rows in (objects | myFilter:numColumns)">
                <td data-ng-repeat="column in (objects | mySecondFilter:rows:numColumns)">
                    {{ column.entry }}
                </td>
            </tr>  
        </table>
    </div>
</div>

CSS

table td{
    padding:2px 5px;
}

JavaScript

angular.module('app', [])
    .filter("mySecondFilter", function(){
        return function(input, row, numColumns){
            var returnArray = [];
            for(var x = row * numColumns; x < row * numColumns + numColumns; x++){
                if(x < input.length){
                    returnArray.push(input[x]);                    
                }
                else{
                    returnArray.push("");
                }
            }
            return returnArray;   
        }
    })
    .filter("myFilter", function(){
        return function(input, numColumns){
            var filtered = [];
            for(var x = 0; x < input.length; x++){
                if(x % numColumns === 0){
                    filtered.push(filtered.length);
                }
            }
            return filtered;
        }
    });
;

function MainController($scope){
    $scope.columnValues = [];
    for(var x = 0; x < 10; x++){
         $scope.columnValues.push(x + 1);   
    }
    $scope.objects = [ ];
    for(var x = 65; x < 91; x++){
        $scope.objects.push({
            entry: String.fromCharCode(x)
        });
    }
    
    $scope.numColumns = 3;
}