我正在尝试过滤下面的“carObj”,因为用户从页面上的列表中选择“过滤器”并仅显示“匹配”子对象。
目前,当用户选择“过滤器”时,它会被添加到“filterObj”,然后我将使用类似8 $ .each语句的“carObj”滚动来拉出所有匹配的子对象。我在值上匹配并多次滚动以使其存在。
例如,假设下面的例子,只有“carObj”中的第3个子对象将被“返回”其所有值。就目前而言,我为所有匹配设置了一个属性为“TRUE”,而对于任何匹配都没有设置为“FALSE”。
然后在网页上滚动浏览“carObj”中所有TRUE值的子对象,并在表格中显示它们的信息/值。
我不确定这是否是最有效的方法。
/* Object filled as user selects "filters" */
filterObj ={
"Seats": {},
"color": {
"Orange": "Orange",
"Red": "Red"
},
"Transmission": {
"Manual": "Manual"
},
"Make": {
"Ford": "Ford"
},
"Model": {},
"Status": {
"New": "New"
}
}
/* Main object that contains all cars */
carObj = {
"cars": [
{
"seats":"6",
"color":"Red",
"transmission":"Automatic",
"make":"Ford",
"model":"Windstar",
"status":"New",
},
{
"seats":"4",
"color":"Black",
"transmission":"Manual",
"make":"Mazda",
"model":"CRX",
"status":"New",
},
{
"seats":"2",
"color":"Orange",
"transmission":"Manual",
"make":"Ford",
"model":"Galaxy",
"status":"New",
}
]
}
答案 0 :(得分:3)
这很难。请参阅this fiddle。
考虑:
不使用过滤器对象中的对象。我使用了简单的数组:
"color": {
"Orange": "Orange",
"Red": "Red"
},
到
"color": ["Orange", "Red"],
这将更加简单和合乎逻辑;
我已将键更改为所有数组和对象中大写的第一个字母。算法必须以其他方式关注它,并根据其功能进行调整。我修复了脚本变小,但如果想要它可以使用非标准的键名称;
该函数返回carObj
中与任何过滤器匹配的任何对象,而不是所有过滤器。但它可以制作。
简而言之,我不确定它的工作是否100%。但它一试。如果你现在发现一些错误/错误。
我希望它有所帮助。
<强>更新强>
我已更新代码以匹配所有过滤器,每个过滤器中至少有一个值。请参阅this Fiddle。
所以现在如果Color
与["Orange"]
匹配,那么汽车必须匹配此颜色才能被选中,如果Color
有["Orange", "Red"]
,则汽车必须匹配Orange
或 Red
。像Color: []
这样的过滤器会被忽略。