1
我正在尝试使用React JS创建搜索。通过阵列与另一个阵列进行过滤
我有一个数组(汽车),我想通过它搜索。我有一个过滤器阵列(在这种情况下是一个),我需要应用。最后,我拥有该过滤器的内容。
我有这样三个数组对象:
汽车(全车的列表)。它看起来如下:
let cars = [ {"id":20,"listID":3,"make":"Golf"}, {"id":21,"listID":3,"make":"Passat"}, {"id":22,"listID":3,"make":"Audi"}, {"id":23,"listID":3,"make":"Touran"}, {"id":24,"listID":3,"make":"Touran"} ];
过滤器(阵列的所有过滤器 - 在这种情况下,只有一个过滤器):
let filters = [ {"name":"FAVORITES","values":[ {"carID":21,"listID":3,"userID":12}, {"carID":22,"listID":3,"userID":12} ] } ];
夹(即过滤器的内容):
let favorites = [ {"carID":21,"listID":3,"userID":12}, {"carID":22,"listID":3,"userID":12} ];
渲染功能如下:
render(){
return cars.filter(car => filters.every(filter => filterItem(filter, car)))
}
因此,我过滤所有的汽车,应用每个过滤器,然后调用每个汽车和每个过滤器的filterItem函数。
和功能的FilterItem(这里我想要得到的结果)如下:
function filterItem(filter, car) {
switch(filter.name) {
case "FAVORITES":
return filter.values.map(f => f).every(v => car.id === v.carID && car.listID === v.listID);
default:
return true;
}
}
这一切都在一个部件结合:
let favorites = [
{"carID":21,"listID":3,"userID":12},
{"carID":22,"listID":3,"userID":12}
];
let cars = [
{"id":20,"listID":3,"make":"Golf"},
{"id":21,"listID":3,"make":"Passat"},
{"id":22,"listID":3,"make":"Audi"},
{"id":23,"listID":3,"make":"Touran"},
{"id":24,"listID":3,"make":"Touran"}
];
let filters = [
{"name":"FAVORITES","values":[
{"carID":21,"listID":3,"userID":12},
{"carID":22,"listID":3,"userID":12}
]
}
]
function filterItem(filter, car) {
switch(filter.name) {
case "FAVORITES":
return filter.values.map(f => f).every(v => car.id === v.carID && car.listID === v.listID);
default:
return true;
}
}
class Test extends React.Component {
render(){
return (
<div>
{cars.filter(car => filters.every(filter => filterItem(filter, car)))}
</div>
)
}
}
React.render(<Test />, document.getElementById('container'));
因此我想通过汽车搜索,并应用所有过滤器(在这种情况下只有一个)并获得结果。
因此,在这种情况下,结果应该是:
let results = [
{"id":21,"listID":3,"make":"Passat"},
{"id":22,"listID":3,"make":"Audi"}
]
但是我的代码我什么也没得到。
有什么建议吗?
我解决它了。这就是解决方案。 :) , 不管怎么说,还是要谢谢你。 – Boky