javascript - 如何将特定道具映射到状态?
问题描述
我正在尝试将特定道具映射到brands
状态。此外,不要添加brands
状态中已经存在的值。
目标输出:
brands: [
"IKEA",
"Tesla"
]
我的尝试
const mapState = (state) => ({
brands: state.products.forEach(product => {
if (product.brands) {
return product.brands;
}
})
});
export default connect(mapState)(Brands);
状态:
products: [
{
"id": 1,
"title": "Pen",
"brands": "IKEA"
},
{
"id": 2,
"title": "Flamethrower",
"brands": "Tesla"
},
{
"id": 3,
"title": "T-shirt",
"brands": "Tesla"
}
]
解决方案
您可以通过使用.reduce
[1] 来构建一系列不同的产品来执行以下操作。
const mapState = (state) => ({
brands: state
.products
.reduce((brands, product) => {
if (!brands.includes(product.brands)) {
return brands.concat([product.brands]);
}
return brands;
}, [])
})
});
export default connect(mapState)(Brands);
如果您需要在应用程序中重用它,您可以将检索不同的品牌提取到一个函数中:
function getProductBrands(products) {
return products
.reduce((brands, product) => {
if (!brands.includes(product.brands)) {
return brands.concat([product.brands]);
}
return brands;
}, []);
}
参考文献:[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
推荐阅读
- css - 是否可以在 WKWebview 中更新 CSS?
- python - 使用sklearn在python中的时空克里金?
- c# - vs buildtools 容器 'dotnet test' 无法找到 Dotnet Core 测试项目的测试
- symfony - Symfony4 DateTimeType 显示无效日期
- amazon-s3 - 在 EC2 中运行时,Flink 未从 S3 读取文件
- c# - 确保在 UI 线程上创建新表单
- video - 什么是 I 帧,它们会影响视频大小吗?
- angular - TypeError: changes.payload.docChanges is not a function in Angular 6 using AngularFire2 v5-rc9
- android - TexInputLayout 错误消息未设置
- selenium - 每次节点被杀死时,Selenium Grid 都会重新启动