2014-02-21 16 views
1

입력에 대해 일련의 로직 테스트를 수행하는 함수를 작성하고 있습니다. 나는 lodash 라이브러리를 사용하고 있습니다. 따라서 ID = 123ABCZ 인 경우이 예제에는 항목 중 하나가 포함되어야합니다.javascript reduce function not running logic

_.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

글쎄, 몇 가지 문제가 있습니다. functionizer는 실제로 무엇을 반환합니까? 인수의 범위와 참조 된 변수가 손실 된 함수 배열입니다. 당신은 폐쇄가 필요합니다 ... 그들 중 몇몇은 잘합니다.

다음은 클로저의 예입니다.

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

예제에서 얻은 결과는 무엇입니까? false 또는 undefined 또는 error입니까? – pwnyexpress

+0

나는 거짓말을하고 있었지만, 뭔가 일하고있다. 나는 (_. contains (list, obj.id))와 함께 뭔가가 일어나고 있다고 생각한다. 내가 아는 obj.id가 포함되어 있으면 if 문에 절대로 들어 가지 않습니다 ... – TorusTorus