_.indexOf的通用实现

时间:2014-05-10 14:49:59

标签: typescript

我正在尝试将实现从here移植到typescript 这有效,但我喜欢将其作为通用fn以及lodash _.indexOf implementation中的其他fn。

indexOf<T>(
            array: Array<T>,
            value: T): number;

        /**
        * @see _.indexOf
        **/
        indexOf<T>(
            array: List<T>,
            value: T): number;

etc...

我现在就这样使用它

var idx = _.indexOf(myList, (r:Type) => {
      return r.Name == k;
});

我正在寻找一种方法来使用以下实现,如

var idx = _.indexOf<Type>(myList, (r) => {
      return r.Name == k;
});

无类型实施:

var indexOfValue = _.indexOf;

// using .mixin allows both wrapped and unwrapped calls:
// _(array).indexOf(...) and _.indexOf(array, ...)
_.mixin({

    // return the index of the first array element passing a test
    indexOf: (array:_.List<any>, test:Function):any => {
        // delegate to standard indexOf if the test isn't a function
        if (!_.isFunction(test)) return indexOfValue(array, test);
        // otherwise, look for the index
        for (var x = 0; x < array.length; x++) {
            if (test(array[x])) return x;
        }
        // not found, return fail value
        return -1;
    }
});

1 个答案:

答案 0 :(得分:0)

这是我写的一段时间:

export function indexOf<T>(items: T[], filter: (item: T) => boolean): number {
    for (var i = 0; i < items.length; i++) {
        if (filter(items[i])) {
            return i;
        }
    }
}