2014-12-05 16 views
1

我有一个回调函数以下滤镜阵列:获取指数

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

     } 
+0

显示完整的代码 – 2014-12-05 15:05:16

+0

我们不能帮你没有为你的'createPredicateFn' – drinchev 2014-12-05 15:05:35

回答

3

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

  1. 元件
  2. Array对象正被遍历

(Source: MDN)

因此,该元素的索引值你内在功能的第二个参数就是你要找的索引。

一个简单的例子看起来是这样的:

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

代码我想,但是并得到了指数,我可以”使我的函数工作(请参阅我的编辑) – ncohen 2014-12-05 15:18:52

+0

你给定的函数永远不会返回一个函数,但没有(因此'undefined')。当你想使用一个生成器函数时,该生成器必须返回一个函数引用,所以filter()知道要使用哪个函数。 – Sirko 2014-12-05 15:22:23

+0

我有点失落...你能否重写我的函数访问索引?我从angularjs过滤器中获得了这个功能,我对它不太满意,这就是为什么我不能100%确定我在做什么。 – ncohen 2014-12-05 15:38:07