我想使用多个以及动态过滤条件过滤我的产品数据。 首先我的原始数据格式是:
[{
...,
"_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
home
且colors
包含white
,则表示所有产品包含主页category
和白色colors
应从主要产品数据中返回。如果colors
中没有值,那么它应该返回所有产品数据category
作为主页,同样如果color
为白色并且categories
为空,那么它应该返回所有白色产品,无论哪个类别。
无论有没有Lodash,我怎样才能实现这一目标?
答案 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
});