select<T>(collection: T[]| { [key: string]: T }, predicate: General.Predicate<this, T>): any {
        let isArray = Array.isArray(collection);
        let results: any = isArray ? [] : {};

        _.each(collection, (value: T, key: string) => {