2014-12-05 59 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