Javascript 显示对象数组上的动态选择项映射
我有一个如下所示的数组:Javascript 显示对象数组上的动态选择项映射,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有一个如下所示的数组: const teamsAndPlayers = [ { team: 'Liverpool', players: ['Salah', 'Henderson'] }, { team: 'Man Utd', players: ['Rashford', 'De Gea'] }, { team: 'Chelsea', players: ['Haz
const teamsAndPlayers = [
{
team: 'Liverpool',
players: ['Salah', 'Henderson']
},
{
team: 'Man Utd',
players: ['Rashford', 'De Gea']
},
{
team: 'Chelsea',
players: ['Hazard', 'Willian']
}
];
const teamsAndPlayers = {
liverpool: {
name: 'Liverpool',
players: ['Salah', 'Henderson']
},
manUtd: {
name: 'Man Utd',
players: ['Rashford', 'De Gea']
},
chelsea: {
name: 'Chelsea',
players: ['Hazard', 'Willian']
}
};
{Object.keys(teamsAndPlayers).map(key => (
<option key={key} value={key}>
{teamsAndPlayers[key].name}
</option>
))}
{teamsAndPlayers[selectedTeam].players.map(player => (
<option key={player} value={player}>
{player}
</option>
))}
我有两个选择框,第二个是基于用户选择的动态框。我遇到的问题是,我不确定根据用户选择查找相关数组的最佳方法。我知道我可以使用find
和其他方法,但是在return语句中的map
函数中,是否还有其他方法可以完成这一切
我的代码如下所示:
const Menu = () => {
const [selectedTeam, setSelectedTeam] = useState(null);
return (
<div>
<select
onChange={e => setSelectedTeam(e.target.value)}
id="team"
name="team"
>
{teamsAndPlayers(item => (
<option key={item.team} value={item.team}>
{item.team}
</option>
))}
<select id="players" name="players">
{teamsAndPlayers(item => (
// how can I get the related players in here
// based on first select choice?
))}
</div>
)
}
const菜单=()=>{
const[selectedTeam,setSelectedTeam]=useState(null);
返回(
setSelectedTeam(e.target.value)}
id=“团队”
name=“团队”
>
{团队和玩家(项目=>(
{item.team}
))}
{团队和玩家(项目=>(
//我怎样才能把相关的玩家弄进来
//基于第一选择?
))}
)
}
只需将查找
和映射
组合起来即可(如果您不想更改数据数组结构):
constplayersbyteam=teamsAndPlayers.find({team})=>team==selectedTeam.players
{playersByTeam.map(player=>{player}}
我会使用object而不是array来定义选择的输入(如果您确实想避免使用find)。
因此,teamsAndPlayers
将如下所示:
const teamsAndPlayers = [
{
team: 'Liverpool',
players: ['Salah', 'Henderson']
},
{
team: 'Man Utd',
players: ['Rashford', 'De Gea']
},
{
team: 'Chelsea',
players: ['Hazard', 'Willian']
}
];
const teamsAndPlayers = {
liverpool: {
name: 'Liverpool',
players: ['Salah', 'Henderson']
},
manUtd: {
name: 'Man Utd',
players: ['Rashford', 'De Gea']
},
chelsea: {
name: 'Chelsea',
players: ['Hazard', 'Willian']
}
};
{Object.keys(teamsAndPlayers).map(key => (
<option key={key} value={key}>
{teamsAndPlayers[key].name}
</option>
))}
{teamsAndPlayers[selectedTeam].players.map(player => (
<option key={player} value={player}>
{player}
</option>
))}
然后,First select中的选项如下所示:
const teamsAndPlayers = [
{
team: 'Liverpool',
players: ['Salah', 'Henderson']
},
{
team: 'Man Utd',
players: ['Rashford', 'De Gea']
},
{
team: 'Chelsea',
players: ['Hazard', 'Willian']
}
];
const teamsAndPlayers = {
liverpool: {
name: 'Liverpool',
players: ['Salah', 'Henderson']
},
manUtd: {
name: 'Man Utd',
players: ['Rashford', 'De Gea']
},
chelsea: {
name: 'Chelsea',
players: ['Hazard', 'Willian']
}
};
{Object.keys(teamsAndPlayers).map(key => (
<option key={key} value={key}>
{teamsAndPlayers[key].name}
</option>
))}
{teamsAndPlayers[selectedTeam].players.map(player => (
<option key={player} value={player}>
{player}
</option>
))}
{Object.keys(teamsAndPlayers.map(key=>(
{teamsAndPlayers[key].name}
))}
然后,第二个选择中的选项如下所示:
const teamsAndPlayers = [
{
team: 'Liverpool',
players: ['Salah', 'Henderson']
},
{
team: 'Man Utd',
players: ['Rashford', 'De Gea']
},
{
team: 'Chelsea',
players: ['Hazard', 'Willian']
}
];
const teamsAndPlayers = {
liverpool: {
name: 'Liverpool',
players: ['Salah', 'Henderson']
},
manUtd: {
name: 'Man Utd',
players: ['Rashford', 'De Gea']
},
chelsea: {
name: 'Chelsea',
players: ['Hazard', 'Willian']
}
};
{Object.keys(teamsAndPlayers).map(key => (
<option key={key} value={key}>
{teamsAndPlayers[key].name}
</option>
))}
{teamsAndPlayers[selectedTeam].players.map(player => (
<option key={player} value={player}>
{player}
</option>
))}
{teamsAndPlayers[selectedTeam].players.map(player=>(
{player}
))}