Improve this Doc

Error: filter:notarray
Not an array

Expected array but received: {0}

Description

This error occurs when filter is not used with an array:

<input ng-model="search">
<div ng-repeat="(key, value) in myObj | filter:search">
  {{ key }} : {{ value }}
</div>

Filter must be used with an array so a subset of items can be returned. The array can be initialized asynchronously and therefore null or undefined won't throw this error.

To filter an object by the value of its properties you can create your own custom filter:

angular.module('customFilter',[])
.filter('custom', function() {
  return function(input, search) {
    if (!input) return input;
    if (!search) return input;
    var expected = ('' + search).toLowerCase();
    var result = {};
    angular.forEach(input, function(value, key) {
      var actual = ('' + value).toLowerCase();
      if (actual.indexOf(expected) !== -1) {
        result[key] = value;
      }
    });
    return result;
  }
});

That can be used as:

<input ng-model="search">
<div ng-repeat="(key, value) in myObj | custom:search">
  {{ key }} : {{ value }}
</div>

You could as well convert the object to an array using a filter such as toArrayFilter:

<input ng-model="search">
<div ng-repeat="item in myObj | toArray:false | filter:search">
  {{ item }}
</div>