reactjs - 没有从 React-redux 获得回报
问题描述
我想在 React-Redux 中过滤我的商店的结果。因此,我创建了一个过滤器选择器。
我的代码只返回所有“购物者”,而它应该只返回过滤后的购物者。
每个购物者都有一组评论,其中包含(一个或多个)带有评论(文本)和评论编号的对象。我们要过滤评论编号。见打印屏幕:
因此,为了澄清,我想按购物者的评论进行过滤,如果该数字 >= 过滤器,则仅返回符合此条件的购物者。
我在这里做错了什么?我怎样才能让它只返回过滤后的结果?
export const selectShoppersWithFilters = (filters) => (state) => {
let shoppers = [...state.publicShoppers];
if (filters.minAverageReview) {
return shoppers.filter((shopper) => {
return shopper.reviews.map((review) => {
if (review.review >= filters.minAverageReview) {
return (shoppers = shopper);
}
});
});
}
console.log(shoppers);
return shoppers;
};
附言。请耐心等待,我是一名初级开发人员...
解决方案
假设您正在尝试过滤“至少有一条评论高于 minAverageReview”的购物者,我认为过滤功能就足够了,您不需要 map。
return shoppers.filter((shopper) => {
return
shopper.reviews.some((review) => review.review >= filters.minAverageReview)
});
因此,在过滤器函数中,您传递一个检查每个元素的回调,并根据您自己的条件决定是否过滤掉该元素,回调函数必须返回一个布尔值。不满足条件的元素(回调返回 false)将被过滤掉。这里我的 some() 检查数组 (shopper.reviews) 是否至少有一个评论元素的评论高于 minAverageReview。
推荐阅读
- javascript - 数组上的forEach在ie11中不起作用
- html - 在所有设备的 iframe 中显示文档
- c++-winrt - 从 C++/Winrt UWP 应用调用旧版 Win32 API
- authentication - ASP.net Core CRUD 授权最佳实践
- ansible - Ansible & Jinja2:将两个列表转换为键值字典
- html - 下拉菜单样式问题
- docker - 如何清理过时的兰多桥?
- angular - angular5 和 http GET 查询参数 - 看起来专用对象(HttpParams 或 UrlSearchParams)不起作用
- powershell - 如何选择“”之间的所有内容并将其保存为变量?
- html - Html:将标题设置为中心