 <p>You should be able to define a custom sort function that sorts by any item in your object. The key bit is to convert the object to an array in the filter function.</p> <p>Here's an example: </p> <pre><code>app.filter('orderByDayNumber', function() { return function(items, field, reverse) { var filtered = []; angular.forEach(items, function(item) { filtered.push(item); }); filtered.sort(function (a, b) { return (a[field] &gt; b[field] ? 1 : -1); }); if(reverse) filtered.reverse(); return filtered; }; }); </code></pre> <p>You would then call it like this:</p> <pre><code>&lt;div ng-repeat="(key, val) in cal | orderByDayNumber: 'day' "&gt; </code></pre> <p>Note, you shouldn't write <code>val.day</code> as that is assumed.</p> <p>Look <a href="http://justinklemm.com/angularjs-filter-ordering-objects-ngrepeat/">at this great blog post here</a> for more info.</p> <p><strong>EDIT</strong>: In fact, it looks like your structure is actually already an array, so while this technique will still work, it may not be necessary - it might have just been the way you were adding the parameter to orderBy that was causing issues.</p>