过滤:基于比较两个对象排除

时间:2015-11-22 10:22:53

标签: comparison operators polymer underscore.js lodash

我有一个网站,您可以在地图上查找打印店并过滤他们提供的服务。示例如下: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:

不,这是错误的做法:/

0 个答案:

没有答案