Filter by a function. Returns a <i>new</i> collection that has been filtered.
The passed function will be called with each object in the collection.
If the function returns true, the value is included otherwise it is filtered.
@param {Function} fn The function to be called.
@param {Mixed} fn.item The collection item.
@param {String} fn.key The key of collection item.
@param {Object} scope (optional) The scope (<code>this</code> reference) in
which the function is executed. Defaults to this MixedCollection.
@return {Ext.util.MixedCollection} The new filtered collection
@since Ext 1
function(fn, scope) {
        var me = this,
            newMC  = new me.self(me.initialConfig),
            keys   = me.keys,
            items  = me.items,
            length = items.length,
            i;

        newMC.getKey = me.getKey;

        for (i = 0; i < length; i++) {
            if (fn.call(scope || me, items[i], keys[i])) {
                newMC.add(keys[i], items[i]);
            }
        }

        return newMC;
    }