javascript reduce函数未运行逻辑

javascript reduce函数未运行逻辑,javascript,lodash,Javascript,Lodash,我正在编写一个函数,它将对输入进行一系列逻辑测试。我正在使用洛达斯图书馆。因此,对于这个特定的示例,如果有一个ID=123ABCZ,它必须包含其中一个项 _.contains(list, obj.id) && _.contains(list, item) 我只有一个对象当前在那里的项目中,但有时我有很多,这就是为什么我有一个被展平的临时对象。如果我传入['123ABCZ','apple'],它应该返回true,但不是。如果ID根本不存在,它也应该返回true。我不知道逻辑哪里出

我正在编写一个函数,它将对输入进行一系列逻辑测试。我正在使用洛达斯图书馆。因此,对于这个特定的示例,如果有一个ID=123ABCZ,它必须包含其中一个项

_.contains(list, obj.id) && _.contains(list, item)
我只有一个对象当前在那里的项目中,但有时我有很多,这就是为什么我有一个被展平的临时对象。如果我传入['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;
}

嗯,这里有几个问题。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;
}

functionizer返回函数数组。在我的示例中,它返回&.containslist,obj.id&&&.containslist,item;对于项目的每个迭代。我只是得到“未定义”;当我试着运行你的例子时。你在你的例子中得到了什么结果,假的,未定义的或错误的?我得到了假的,但是现在有些东西正在工作。。。我认为if_.containslist,obj.id发生了一些事情。当我给它一个我知道包含的obj.id时,它永远不会进入if语句。。。