我有一个网站,您可以在地图上查找打印店并过滤他们提供的服务。示例如下:www.pigments.io
每个印刷厂都有一些存储在物体中的属性。
marker: {
processes: {
'digital': false,
'offset': false,
'silk': true,
'letterpress': false,
'engraving': false
},
finishings: {
'diecutting': true,
'lasercut': false,
'perforation': false,
'msg': false,
'softtouch': false,
},
products: {
'apparel': true,
'largeformat': false
}
}
复选框返回具有相同结构的对象,如果选中该复选框,则该值设置为true。现在让我们说如果我只想展示丝网商店,如果只有丝网在流程下检查我可以做这样的事情:
((marker.processes.silk == true && marker.processes.silk == formData.processes.silk) ||
商店(标记)需要设置为真正的丝绸属性&如果选中该复选框,则返回true。我正在使用聚合物,它会过滤每个标记对象并评估上面的语句。如果是真的,它会显示标记。 (我刚才意识到我可以做到这一点:
((marker.processes.silk == true && formData.processes.silk == true))
现在我当然可以这样做。
((marker.processes.silk == true && formData.processes.silk == true) || (marker.processes.digital == true && formData.processes.digital== true))
等等。那会变丑,但理论上会有效。但是现在如果我引入另一个要比较的领域,比如说完成,那我就完全迷失了。基本上我要说我只想展示丝网店。作为上面的代码。现在我只想展示那些做模切的丝网商店。我知道我怎么能单独寻找丝绸商店,或只有模切商店。但现在,如果我添加这两个,如果选择了模切,这需要从已经过滤的丝绸商店中排除。
我的大脑很糊涂,请帮助x_x。我一直试图为此提出一个多小时的解决方案,思想在圈子里旋转。我甚至不确定是否可以通过基本比较运算符来完成这项工作?
此外,我意识到这种方法非常丑陋且效率低下。
/ EDIT1:
我刚刚意识到我应该检查下划线。基本上如果我没有弄错,我只需要检查打印店对象的真值是否与复选框对象的值相同,对吗?
/ EDIT2:
我想我需要从标记对象获取所有真正的属性,并将它们与复选框中的相应属性进行比较。如果它们都是真/相同,那么应该显示标记,对吗?
/ EDIT3:
我几乎拥有它(我想如果我对edit2的假设是正确的)。
var markerProcessKeys = lodash.keys(lodash.pick(marker.processes, lodash.identity));
var markerProcess = lodash.pick(marker.processes, lodash.identity);
// doesn't work
var filterProcess = lodash.pick(formData.processes, markerProcessKeys);
//var filterProcess = lodash.pick(formData.processes, 'digital','offset');
// This one works, manually selecting only the true ones.
//So what's left to do is get the key names of the true ones and then compare
//I don't have it working yet though... I need to do the manual one automatically with lodash. Suggestions?
// this won't work
var = lodash.pick(markerProcess, filterProcess);
console.log(lodash.isMatch(t1, t2));
/ edit4:
不,这是错误的做法:/