2014-02-21 154 views
1

我正在寫一個函數,將對輸入做一系列的邏輯測試。我正在使用lodash庫。所以對於這個特定的例子,如果有一個ID = 123ABCZ,它必須包含其中一個項目。JavaScript減少功能不運行邏輯

_.contains(list, obj.id) && _.contains(list, item) 

我只有一個當前對象(item_arr)在那裏,但有時我有很多這就是爲什麼我有一個扁平的臨時OBJ。如果我傳入['123ABCZ','apple'],它應該返回true,但不是。如果ID根本不存在,它也應該返回true。我無法弄清楚邏輯出錯的地方!

function include_test(list){ 

    var item_arr = [{id: '123ABCZ', item: ['apple', 'pear', 'grape', 'lemon', 'lime']}]; 

    var functionizer = function(obj){ 
     var func_arr = _.map(obj.item, function(item){ 
      return function(){ 
          if(_.contains(list, obj.id) 
        return _.contains(list, obj.id) && _.contains(list, item); 
          return true; 
      }; 
     }); 
     return func_arr; 
    }; 

    var temp = _.flatten(_.map(item_arr, function(item){ 
     return functionizer(item); 
    })); 

    var result = _.reduce(temp, function(acc, func){ 
     acc = acc || func(); 
     return acc; 
    }, false); 

    return result; 
} 

回答

0

那麼,這裏有幾個問題。什麼是函數器實際返回?一系列失去參數範圍和參考變量的函數。你需要一個關閉......以及其中幾個。

下面是一個閉包的例子。

function include_test(list){ 

    var item_arr = [{id: '123ABCZ', item: ['apple', 'pear', 'grape', 'lemon', 'lime']}]; 

    function functionizer(obj){ 
     var _obj = obj; 
     return function() { 
      _.map(_obj.item, function(item){ 
       return (function(itemRef, listRef, objRef){ 
          if(_.contains(listRef, objRef.id) 
           return _.contains(listRef, objRef.id) && _.contains(listRef, itemRef); 
           return true; 
         })(item, list, _obj); 
      }); 
     } 
    }; 

    var temp = _.flatten(_.map(item_arr, function(item){ 
     return functionizer(item); 
    })); 

    var result = _.reduce(temp, function(acc, func){ 
     acc = acc || func(); 
     return acc; 
    }, false); 

    return result; 
} 
+0

functionizer返回一個函數數組。在我的例子中,它返回_.contains(list,obj.id)&& _.contains(list,item);用於物品的每次迭代。我只是'未定義;當我嘗試運行你的例子。 – TorusTorus

+0

你在你的例子中得到了什麼結果,錯誤還是未定義或錯誤? – pwnyexpress

+0

我得到了錯誤,但現在有些工作正在進行......我認爲if(_。contains(list,obj.id))正在發生某些事情。當我知道它包含了我知道的obj.id時,它永遠不會進入if語句...... – TorusTorus