Javascript 映射函数中的条件表单元格
我有一个映射到表中的数组,我想检查对象属性“userName”是否与标题相同,以便我知道将该值放置在何处,否则应显示为“0” 以下是完成映射后的表格:Javascript 映射函数中的条件表单元格,javascript,arrays,reactjs,material-ui,Javascript,Arrays,Reactjs,Material Ui,我有一个映射到表中的数组,我想检查对象属性“userName”是否与标题相同,以便我知道将该值放置在何处,否则应显示为“0” 以下是完成映射后的表格: {report.data.map(obj => ( <React.Fragment> <TableCell>{obj.userName === users[0] ? obj.workedHours : "0"}</T
{report.data.map(obj => (
<React.Fragment>
<TableCell>{obj.userName === users[0] ? obj.workedHours : "0"}</TableCell>
<TableCell>{obj.userName === users[1] ? obj.workedHours : "0"}</TableCell>
<TableCell>{obj.userName === users[2] ? obj.workedHours : "0"}</TableCell>
</React.Fragment>
))}
和report.data
是每个项目的对象数组:
[{userName: "User 1", rate: 5, clientName: "client A", workedHours: 8},
{userName: "User 2", rate: 3, clientName: "client B", workedHours: 5}]
这就是表格的结尾:
你能帮我在每个用户存在的地方显示其值,否则显示“0”吗
感谢您抽出时间我创建了一个react示例 我通过迭代用户的标题列,使它更具动态性 如果一个用户在多个客户端上工作,数据会是什么样子
constusers=[“用户1”、“用户2”、“用户3”];
施工项目=[
{
项目名称:“项目1”,
数据:[
{用户名:“用户1”,费率:5,客户端名称:“客户端A”,工作时间:8},
{用户名:“用户2”,费率:3,客户端名称:“客户端B”,工作时间:5}
]
},
{
项目名称:“项目2”,
数据:[
{用户名:“用户3”,费率:6,客户端名称:“客户端A”,工作时间:5}
]
}
]
ReactDOM.render(
项目:
{users.map(user=>(
{user}
))}
{projects.map(project=>(
{project.projectName}
{users.map(user=>{
//仅筛选在项目中工作过的用户
const usersOnProject=project.data.filter(obj=>obj.userName==user)
//如果项目中有用户,请迭代他们
if(usersOnProject.length){
返回(
{usersOnProject.map(obj=>obj.userName==user&&obj.workedHours)}
)
}
//否则,如果项目上没有用户,则返回0
返回(
0
)
})}
))}
,
document.getElementById('root'))
);代码>
表格{
边界塌陷:塌陷;
字体系列:无衬线;
字体大小:14px;
}
表td+td,表th+th{
文本对齐:居中;
边界塌陷:
}
跨度{
颜色:红色;
}
td,th{
填充:3倍;
边框底部:1px实心#ccc;
}
我创建了一个react示例
我通过迭代用户的标题列,使它更具动态性
如果一个用户在多个客户端上工作,数据会是什么样子
constusers=[“用户1”、“用户2”、“用户3”];
施工项目=[
{
项目名称:“项目1”,
数据:[
{用户名:“用户1”,费率:5,客户端名称:“客户端A”,工作时间:8},
{用户名:“用户2”,费率:3,客户端名称:“客户端B”,工作时间:5}
]
},
{
项目名称:“项目2”,
数据:[
{用户名:“用户3”,费率:6,客户端名称:“客户端A”,工作时间:5}
]
}
]
ReactDOM.render(
项目:
{users.map(user=>(
{user}
))}
{projects.map(project=>(
{project.projectName}
{users.map(user=>{
//仅筛选在项目中工作过的用户
const usersOnProject=project.data.filter(obj=>obj.userName==user)
//如果项目中有用户,请迭代他们
if(usersOnProject.length){
返回(
{usersOnProject.map(obj=>obj.userName==user&&obj.workedHours)}
)
}
//否则,如果项目上没有用户,则返回0
返回(
0
)
})}
))}
,
document.getElementById('root'))
);代码>
表格{
边界塌陷:塌陷;
字体系列:无衬线;
字体大小:14px;
}
表td+td,表th+th{
文本对齐:居中;
边界塌陷:
}
跨度{
颜色:红色;
}
td,th{
填充:3倍;
边框底部:1px实心#ccc;
}
您的报告.data
是什么样子的?编辑此帖子以显示报告.data
的样子。谢谢你的提醒你看到外壳的不同了吗?“User 1”===“User 1”将始终为false,因为大写字母是“U”。我认为您只需要obj.userName.toLowerCase()===users[0]。toLowerCase()
@BjørnNyborg从这个角度来看,实际数据是可以的,这里只是写了个例子,但谢谢,我更正了你的报告.数据
是什么样子的?编辑了这篇文章,展示了报告.数据
的样子。谢谢你的提醒你看到外壳的不同了吗?“User 1”===“User 1”将始终为false,因为大写字母是“U”。我认为您只需要obj.userName.toLowerCase()===users[0]。toLowerCase()
@BjørnNyborg从这个角度来看,实际数据是可以的,这里只是写了个例子,但谢谢,我纠正了您给我一个映射用户的想法,但是问题不在于clientName
,它还没有被使用,只是出现在object中,而是如果有更多的用户在同一个项目上工作。正如您在问题所附的照片中看到的,它没有在第一行的下一个值上显示:“1 8 2.5”而是显示“0 0 2.5 | 1 0 0 | 0 8 0”,即使使用{report.data.map(obj=>(users.map)(user=>({obj.userName==user?obj.workedHours:“0”)也一样)}
如果有多个用户在同一个项目上工作,您能提供一个数据示例吗?我的第一个对象数组如下:[{projectName:“project 1”,数据:[{userName:“User 1”,rate:5,clientName:“client A”,workedHours:8},{userName:“User 2”,rate:3,clientName:“client B”,workedHours:5}]},{projectName:“project 2”,data:[{userName:“User 3”,rate:6,clientName:“client A”,workedHours:5}]}
。由此,我使用projectName作为每行的第一个单元格,然后映射
[{userName: "User 1", rate: 5, clientName: "client A", workedHours: 8},
{userName: "User 2", rate: 3, clientName: "client B", workedHours: 5}]