【发布时间】:2014-02-28 14:39:57
【问题描述】:
我正在尝试对数组进行一系列逻辑测试。每个数组包含 1 个 ID 号和 1 个项目。我需要检查以下内容:如果 ID 号 1 出现在数组中,它必须包含鞋或袜子(除了鞋或袜子之外的任何东西都返回 false),并且它们必须至少出现一次 [1, sock] 和 [1,鞋]。 ID 1 不需要发生,后者仅在发生时应用。对于 ID 2,同样的条件。我想给我的函数一个对象数组,告诉它要查找什么 - 我函数中的 var f。如果数组中只有 1 个对象,我的逻辑在这里可以正常工作,但是一旦我添加更多对象,它就会失败。
我认为我在展平项目数组时出错了。有没有更好的方法来做这样的事情,也许是减少和或映射?
var _ = require('lodash');
function d(msg) {
console.log(msg);
}
var test_data = [[1,'shoe'],[1,'sock'], [2, 'apple'], [2, 'pear']];
function checker(array){
var f = [{id_num: 1, item: ['shoe', 'sock']}, {id_num: 2, item: ['apple', 'pear']}];
var mm = true;
var inLine;
var valids = function(obj){
vlist = [];
_.forEach(obj, function(item){
vlist.push(item.item);
});
return _.flatten(vlist);
};
_.forEach(f, function(obj){
_.forEach(obj.item, function(zone){
inLine = false;
_.forEach(t, function(line){
if(_.contains(valids(f), line[1])){
if(_.contains(line, obj.id_num) && _.contains(line, zone)){
inLine = true;
}
} else { inLine = false; }
});
mm = mm && inLine;
});
});
d(mm);
}
checker(test_data);
如果 test_data 为 [[1,'shoe'],[1,'sock']],则预期结果的示例。预期的结果应该是 True 因为 2 确实发生了。仅当值出现时才适用测试...
【问题讨论】:
标签: javascript lodash