Javascript 获取array.filter回调函数中的索引

Javascript 获取array.filter回调函数中的索引,javascript,arrays,Javascript,Arrays,我有以下带有回调函数的数组过滤器: array.filter(createPredicateFn(expression, comparator)); function createPredicateFn(expression, comparator) { var predicateFn; if (comparator === true) { comparator = angular.equals;

我有以下带有回调函数的数组过滤器:

array.filter(createPredicateFn(expression, comparator));
     function createPredicateFn(expression, comparator) {
            var predicateFn;

            if (comparator === true) {
                comparator = angular.equals;
            } else if (!angular.isFunction(comparator)) {
                comparator = function (actual, expected) {
                    if (angular.isObject(actual) || angular.isObject(expected)) {
                        // Prevent an object to be considered equal to a string like `'[object'`
                        return false;
                    }

                    actual = angular.lowercase('' + actual);
                    expected = angular.lowercase('' + expected);
                    return actual.indexOf(expected) !== -1;
                };
            }

            predicateFn = function (item) {
                return deepCompare(item, expression, comparator);
            };

        }
我的回调函数声明如下:

function createPredicateFn(expression, comparator) {
如何获取createPredicateFn中元素的索引

编辑:

这是我的谓词函数:

array.filter(createPredicateFn(expression, comparator));
     function createPredicateFn(expression, comparator) {
            var predicateFn;

            if (comparator === true) {
                comparator = angular.equals;
            } else if (!angular.isFunction(comparator)) {
                comparator = function (actual, expected) {
                    if (angular.isObject(actual) || angular.isObject(expected)) {
                        // Prevent an object to be considered equal to a string like `'[object'`
                        return false;
                    }

                    actual = angular.lowercase('' + actual);
                    expected = angular.lowercase('' + expected);
                    return actual.indexOf(expected) !== -1;
                };
            }

            predicateFn = function (item) {
                return deepCompare(item, expression, comparator);
            };

        }

createPredicateFn()
中,必须返回另一个函数。此内部函数最多可以有三个参数:

  • 元素的值
  • 元素的索引
  • 正在遍历的数组对象
  • 因此,内部函数的第二个参数是要查找的索引

    一个简单的例子可能如下所示:

    function createPredicateFn(expression, comparator) {
      return function( val, index, arr ) {
        // do something and return a boolean here
        return index % 2 == 0;
      }
    }
    

    如果没有
    createPredicateFn
    的代码,我们将无法帮助您。我尝试了这个方法并获得了索引,但是,我无法使我的函数工作(请参见我的编辑)。给定的函数从未返回函数,但什么都没有返回(因此
    未定义的
    )。当您想使用生成器函数时,该生成器必须返回一个函数引用,因此
    filter()
    知道要使用哪个函数。我有点迷路了……请您通过访问索引重写我的函数好吗?我是从angularjs filter得到这个函数的,我对它不是很满意,这就是为什么我不能100%确定我在做什么。@n当实际的函数决定一个条目应该留在数组中还是被过滤时,是
    predicateFn()
    ,对吗?如果是这样的话,只需在函数末尾返回它。明白了,我今天晚些时候会尝试!谢谢