Is there an indexOf in javascript to search an array with custom compare function

后端 未结 8 1729
执笔经年
执笔经年 2020-12-05 18:05

I need the index of the first value in the array, that matches a custom compare function.

The very nice underscorej has a \"find\" function that returns the

相关标签:
8条回答
  • 2020-12-05 18:42

    Here's the Underscore way to do it - this augments the core Underscore function with one that accepts an iterator function:

    // save a reference to the core implementation
    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: function(array, test) {
            // 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;
        }
    
    });
    
    _.indexOf([1,2,3], 3); // 2
    _.indexOf([1,2,3], function(el) { return el > 2; } ); // 2
    
    0 讨论(0)
  • 2020-12-05 18:42

    The javascript array method filter returns a subset of the array that return true from the function passed.

    var arr= [1, 2, 3, 4, 5, 6],
    first= arr.filter(function(itm){
        return itm>3;
    })[0];
    alert(first);
    
    if you must support IE before #9 you can 'shim' Array.prototype.filter-
    
    Array.prototype.filter= Array.prototype.filter || function(fun, scope){
        var T= this, A= [], i= 0, itm, L= T.length;
        if(typeof fun== 'function'){
            while(i<L){
                if(i in T){
                    itm= T[i];
                    if(fun.call(scope, itm, i, T)) A[A.length]= itm;
                }
                ++i;
            }
        }
        return A;
    }
    
    0 讨论(0)
提交回复
热议问题