code: function uniq() {
        var args = a_slice.call(arguments);
  
        args.push({
          initialize: function(array, changeMeta, instanceMeta) {
            instanceMeta.itemCounts = {};
          },
  
          addedItem: function(array, item, changeMeta, instanceMeta) {
            var guid = guidFor(item);
  
            if (!instanceMeta.itemCounts[guid]) {
              instanceMeta.itemCounts[guid] = 1;
              array.pushObject(item);
            } else {
              ++instanceMeta.itemCounts[guid];
            }
            return array;
          },
  
          removedItem: function(array, item, _, instanceMeta) {
            var guid = guidFor(item);
            var itemCounts = instanceMeta.itemCounts;
  
            if (--itemCounts[guid] === 0) {
              array.removeObject(item);
            }
  
            return array;
          }
        });
  
        return arrayComputed.apply(null, args);
      }
docs: A computed property which returns a new array with all the unique
  elements from one or more dependent arrays.
  
  Example
  
  ```javascript
  var Hamster = Ember.Object.extend({
  uniqueFruits: Ember.computed.uniq('fruits')
  });
  
  var hamster = Hamster.create({
  fruits: [
  'banana',
  'grape',
  'kale',
  'banana'
  ]
  });
  
  hamster.get('uniqueFruits'); // ['banana', 'grape', 'kale']
  ```
  
  @method computed.uniq
  @for Ember
  @param {String} propertyKey*
  @return {Ember.ComputedProperty} computes a new array with all the
  unique elements from the dependent array