javascript - 无法映射控制台中看到的对象的值
问题描述
我的想法是单击左侧导航栏上的任何按钮,只要对象中单击的按钮的名称与内对象logos
中的任何名称匹配,然后显示这些对象。items
projects
当我单击左侧的任何按钮时,我将该对象的active
属性转换true
为对象内logos
。在我过滤了这些值之后,我可以在控制台中看到所有正确的值,但是我无法循环它们——使用for
循环或map
. 奇怪的是,当我写作时,filteredValues[0]
我能够将该数据输出到屏幕上,但由于我想要其中一些点击值的多个输出,所以这不是一个选项。任何帮助表示赞赏。谢谢!
这些是我的项目
这些是我的标志
const Homepage = () => {
const {state} = useContext(Context)
const {projects,logos} = state;
return (
<>
<div className="container">
<Language />
<div className="homepage">
{logos.map(logo => {
let filteredValues;
if(logo.active == true){
filteredValues = Object.values(projects).filter(({items}) => Object.values(items).includes(logo.name))
filteredValues.map((val) =>{
console.log(val)
return(
<div>{val.title}</div>
)
}) //end of filteredValues.map
} //end of if
}) // end of logos.map
}
</div>
</div>
</>
)}
解决方案
Array.map() 将始终返回相同长度的 Array,无论您是否返回任何内容。如果您不返回任何内容,那么它将是一个具有空值的稀疏数组。尝试仅返回包含所需数据的数组。在这里,我刚刚将 Logos 逻辑分离到一个单独的变量中。
render() {
const Logos = (
<div className="homepage">
logos.reduce((acc, logo) => {
if (logo.active) {
const filteredValues = Object.values(projects).filter(({items}) => Object.values(items).includes(logo.name));
Object.values(projects).forEach(({items}) => {
if (Object.values(items).includes(logo.name)) {
acc.push((<div>{val.title}</div>));
}
});
}
return acc
}, [])
</div>
)
return (
<div className="container">
<Language />
{Logos}
// rest of the code
)
}
推荐阅读
- typescript - 为什么打字稿可以使用双重否定而不是布尔构造函数来推断非空类型?
- angular - 关于 ngrx-store-freeze 和 [(ngModel)] 的一些问题
- c# - 无法加载文件或程序集'System.Private.ServiceModel,版本 = 4.1.2.4
- mysql - Perl SQL::SplitStatement 挂在大字符串上
- python - 编写程序生成日志
- sap - 热文件夹 - 如何检查导入到 Hybris 的文件的状态?
- excel - 使用输入和命令按钮制作 vba 用户表单
- html - 列多时无法固定列宽
- sql-server - SQL Server 设置要保留的备份数量
- web3 - 在 MetaMask 中以编程方式设置自定义 RPC URL