此关键字在javascript中的异常行为
我有下面的代码片段,它应该返回敏捷团队的所有团队名称。但是代码返回未定义的此关键字在javascript中的异常行为,javascript,Javascript,我有下面的代码片段,它应该返回敏捷团队的所有团队名称。但是代码返回未定义的。我已经试过了let\u this=this并将此替换为此,但没有结果。谁能帮我做这个吗 let teamSelector = { teams: ['Team Alpha', 'Team Beta', 'Team Delta'], selectTeam: function(members){ // let _this = this; return members.map((member)=>
。我已经试过了let\u this=this编码>并将此
替换为此
,但没有结果。谁能帮我做这个吗
let teamSelector = {
teams: ['Team Alpha', 'Team Beta', 'Team Delta'],
selectTeam: function(members){
// let _this = this;
return members.map((member)=>{
return `${member} is on ${this.teams[Math.random() * 3]}`;
});
}
};
teamSelector.selectTeam(['Anna','Jhon','Kevin','Lesli']);
random()返回小数。如果需要数组索引,则需要整数
看
让团队选择器={
团队:['Team Alpha'、'Team Beta'、'Team Delta'],
选择团队:功能(成员){
//让_this=this;
返回成员。映射((成员)=>{
return${member}位于${this.teams[Math.random()*3|0]}上;
});
}
};
log(teamSelector.selectTeam(['Anna','Jhon','Kevin','Lesli'])
Math.random()返回小数。如果需要数组索引,则需要整数
看
让团队选择器={
团队:['Team Alpha'、'Team Beta'、'Team Delta'],
选择团队:功能(成员){
//让_this=this;
返回成员。映射((成员)=>{
return${member}位于${this.teams[Math.random()*3|0]}上;
});
}
};
log(teamSelector.selectTeam(['Anna','Jhon','Kevin','Lesli'])代码>您必须在math.random中通过默认值0
let teamSelector = {
teams: ['Team Alpha', 'Team Beta', 'Team Delta'],
selectTeam: function(members){
// let _this = this;
return members.map((member)=>{
return `${member} is on ${this.teams[Math.random() * 3 | 0]}`;
});
}
};
teamSelector.selectTeam(['Anna','Jhon','Kevin','Lesli']);
您必须在math.random中通过默认值0
let teamSelector = {
teams: ['Team Alpha', 'Team Beta', 'Team Delta'],
selectTeam: function(members){
// let _this = this;
return members.map((member)=>{
return `${member} is on ${this.teams[Math.random() * 3 | 0]}`;
});
}
};
teamSelector.selectTeam(['Anna','Jhon','Kevin','Lesli']);
从Math.random
生成的值是一个浮点数,因此它永远不会引用this.teams
中的数组索引,因此未定义的
值
您需要做的是使用Math.random()*this.teams.length
生成一个随机数,这样它就永远不会生成大于数组大小本身的索引值。然后,您需要使用Math.floor
将其取整为Math.random
生成浮点数
let teamSelector = {
teams: ["Team Alpha", "Team Beta", "Team Delta"],
selectTeam: function (members) {
return members.map((member) =>
`${member} is on ${
this.teams[Math.floor(Math.random() * this.teams.length)]
}`
);
},
};
teamSelector.selectTeam(["Anna", "John", "Kevin", "Lesli"]);
也只是一个旁注-箭头函数隐式返回,因此您不需要在映射中return
。但是,您确实需要对映射
本身使用返回
,以将此
的上下文保持在对象的块范围内。您将看到,如果您隐式返回映射
,则此
将引用窗口
对象或更高的块范围,如类实现。从Math.random
生成的值是一个浮点数,因此它永远不会引用此中的数组索引。teams
,因此,未定义
值
您需要做的是使用Math.random()*this.teams.length
生成一个随机数,这样它就永远不会生成大于数组大小本身的索引值。然后,您需要使用Math.floor
将其取整为Math.random
生成浮点数
let teamSelector = {
teams: ["Team Alpha", "Team Beta", "Team Delta"],
selectTeam: function (members) {
return members.map((member) =>
`${member} is on ${
this.teams[Math.floor(Math.random() * this.teams.length)]
}`
);
},
};
teamSelector.selectTeam(["Anna", "John", "Kevin", "Lesli"]);
也只是一个旁注-箭头函数隐式返回,因此您不需要在映射中return
。但是,您确实需要对映射
本身使用返回
,以将此
的上下文保持在对象的块范围内。您将看到,如果您隐式返回映射
,那么此
将引用窗口
对象或更高的块范围,例如类实现。Math.random()*3
是返回一个浮点数,您需要获得它的下限Math.floor(Math.random()*3)
Math.random()*3
返回一个浮点数,您需要获得它的floor<代码>数学地板(数学随机()*3)