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

时间:2014-12-05 15:03:17

标签: javascript arrays

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

array.filter(createPredicateFn(expression, comparator));

我的回调函数声明如下:

function createPredicateFn(expression, comparator) {

如何在createPredicateFn中获取元素的索引?

编辑:

这是我的谓词函数:

     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);
            };

        }

1 个答案:

答案 0 :(得分:3)

createPredicateFn()内你必须返回另一个功能。这个内部函数最多可以有三个参数:

  1. 元素的值
  2. 元素的索引
  3. 正在遍历的Array对象
  4. (Source: MDN)

    因此,内部函数的第二个参数是您要查找的索引。

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

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