【发布时间】:2021-06-10 19:07:18
【问题描述】:
我想用多个值过滤多个属性
'arr' 是所有产品的列表,f_... 是颜色或类型等属性。
'namet' 是用户选择的属性。
'keyt'是红色、黄色和绿色等每个属性的值。
let arr = [
{ "id": 523, "f_105": ["992","996"], "f_104": ["985"], "f_106":["1000"] },
{ "id": 524, "f_105": ["993","996"], "f_104": ["984"], "f_106":["1001"] }
]
用户选择搜索的这些数组
我可以得到这样的属性
var namet = ['f_106', 'f_106', 'f_105', 'f_105', 'f_104' ];
var keyt = ['1000' , '1001', '993', '996', '985'];
或
var chooenKey = ['f_106', 'f_105', 'f_104']
var chosenAttr = {
"f_106": ["1000", "1001"],
"f_105": ["993", "996"],
"f_104": ["985"],
}
或
var chosenAttr =
[
{"f_106": ["1000", "1001"]},
{"f_105": ["993", "996"]},
{"f_104": ["985"]}
]
我想要一个循环的方法来获得像变量“过滤”这样的结果
var filtered = d =>
(d.f_106.indexOf("1000") > -1 || d.f_106.indexOf("1001") > -1) &&
(d.f_105.indexOf("993") > -1 || d.f_105.indexOf("996") > -1) &&
(d.f_104.indexOf("985") > -1)
然后放这里
const f = arr.filter(filtered);
您还可以提供另一种类型来过滤具有多个属性的产品。
【问题讨论】:
-
具体问题是什么?回想一下,您可以通过这种方式访问
d.f_106,也可以访问d["f_106"]。 -
我想要一个方法或循环来生成类似于变量过滤的代码。如果我在 selectedAttr 中有 {"f_106": ["1000", "1001"]} 那么变量将类似于 var filters = d => (d.f_106.indexOf("1000") > -1 || d. f_106.indexOf("1001") > -1)
-
所以你想迭代
chosenAttr(在这个评论中每个项目都称为attr),并且对于每个attr,使用对象键来查看d你的哪个属性重新检查,看看attrValue中是否存在任何d[attrKey]值,这可以通过多种方式完成。你。可能是想多了:) -
是的,也许我可以像在 arr 列表中那样过滤产品。
-
通过上述操作。
标签: javascript arrays json filter attributes