我正在编写一个函数,它将对输入进行一系列逻辑测试。我正在使用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;
}
答案 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;
}