javascript减少函数不运行逻辑

时间:2014-02-21 17:26:14

标签: javascript lodash

我正在编写一个函数,它将对输入进行一系列逻辑测试。我正在使用lodash库。因此,对于此特定示例,如果存在ID = 123ABCZ,则它必须包含其中一个项目。

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

1 个答案:

答案 0 :(得分: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;
}