使用Lodash使用动态和嵌套过滤条件过滤数据

时间:2018-05-01 10:45:33

标签: javascript arrays object filter lodash

我想使用多个以及动态过滤条件过滤我的产品数据。 首先我的原始数据格式是:

[{

 ...,

 "_source": {

  ...,

  "categories": [
   "home",
   "office"
  ],

  ...,

  "attributes": {
    "colors": [
      "Red-White-Blue",
      "Orange-Red-Black"
    ]
  },

  ...,

 }
}]

现在,我有另一个动态对象,其键值对是在运行时生成的。对象是:

{  
   selectedFilters: {
     categories: ["home", "office", "public"],
     colors: ["Red-White-Blue", "Orange-Red-Black", "Blue"],
     ...
   }
}

这里,类别数组可能存在,也可能不存在。同样,keyvalue对是动态生成的。

现在,我想循环遍历selectedFilters对象中的所有键,并从原始数据中找到它们各自的数组。

如果selectedFilters包含categories homecolors包含white,则表示所有产品包含主页category和白色colors应从主要产品数据中返回。如果colors中没有值,那么它应该返回所有产品数据category作为主页,同样如果color为白色并且categories为空,那么它应该返回所有白色产品,无论哪个类别。

无论有没有Lodash,我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:0)

以下代码适用于searchFilters中的动态键。然后,我正在过滤产品数据中的数据。

let keys = Object.keys(this.selectedFilters);

keys.forEach(function(filterKey) {

  let filterdProducts = _.filter(self.products, function(o) {

  let flg = false;
  let searchFilterKey = self.selectedFilters[filterKey];
  searchFilterKey.forEach(function(sKey) {
    let ind = o._source[filterKey].indexOf(sKey)
    if (ind > 0)
      flg = true;
  })
  if (flg)
    return o;
});

self.filteredProducts = filterdProducts

});