Javascript 执行if和else条件
我有一个if条件,它会改变状态值,而else部分会为状态指定一个不同的值。但两人都在被处决。如何避免这种情况Javascript 执行if和else条件,javascript,reactjs,Javascript,Reactjs,我有一个if条件,它会改变状态值,而else部分会为状态指定一个不同的值。但两人都在被处决。如何避免这种情况 getJobId = (event) => { const { appliedjobs } = this.props {appliedjobs && appliedjobs.map(job => { if(event.target.getAttribute('name')===job.id) {
getJobId = (event) => {
const { appliedjobs } = this.props
{appliedjobs && appliedjobs.map(job => {
if(event.target.getAttribute('name')===job.id)
{
this.setState({applystatus:job.applystatus},()=>{
console.log('====================================');
console.log(this.state.applystatus);
console.log('====================================');
})
}
else if(event.target.getAttribute('name')!=job.id){
this.setState({applystatus:"apply now"},()=>{
console.log('====================================');
console.log("else ",this.state.applystatus);
console.log('====================================');
})
}
})}
this.setState({
jobid: event.target.getAttribute('name')
}, () => this.sendJobId())
}
您的
else if
语句可能会返回与相同的结果=代码>可能返回假阳性。不过,您只需要一个else语句:
if(event.target.getAttribute('name')===job.id) { ... }
else { ... }
如果if
语句肯定为false,则无论如何只能在else块中执行setState
函数。您的else if
语句可能返回与相同的结果=代码>可能返回假阳性。不过,您只需要一个else语句:
if(event.target.getAttribute('name')===job.id) { ... }
else { ... }
如果if
语句肯定为false,则无论如何只能在else块中执行setState
函数。您映射到applidjobs
数组,并且在每次迭代期间在if
语句的两个分支中设置status.applystatus
。因此,applystatus
值将是上次迭代中设置的值:
appliedjobs.map(job => {
if (event.target.getAttribute('name') === job.id) {
this.setState({ applystatus: job.applystatus })
} else if (event.target.getAttribute('name') != job.id) {
this.setState({ applystatus: 'apply now' })
}
})
this.setState({ jobid: event.target.getAttribute('name') }, () => this.sendJobId())
我建议查找与name
属性匹配的作业,如果找到,请将applystatus
设置为作业状态,否则将其设置为apply now
,您不需要映射或使用if/else
语句:
const jobid = event.target.getAttribute('name');
const job = appliedjobs.find(({ id }) => id === jobid );
this.setState({
applystatus: job ? job.applystatus : 'apply now,
jobid
}, () => this.sendJobId());
您正在映射applidjobs
数组,并在每次迭代期间在if
语句的两个分支中设置state.applystatus
。因此,applystatus
值将是上次迭代中设置的值:
appliedjobs.map(job => {
if (event.target.getAttribute('name') === job.id) {
this.setState({ applystatus: job.applystatus })
} else if (event.target.getAttribute('name') != job.id) {
this.setState({ applystatus: 'apply now' })
}
})
this.setState({ jobid: event.target.getAttribute('name') }, () => this.sendJobId())
我建议查找与name
属性匹配的作业,如果找到,请将applystatus
设置为作业状态,否则将其设置为apply now
,您不需要映射或使用if/else
语句:
const jobid = event.target.getAttribute('name');
const job = appliedjobs.find(({ id }) => id === jobid );
this.setState({
applystatus: job ? job.applystatus : 'apply now,
jobid
}, () => this.sendJobId());
如果我理解你的代码,你应该这样做:
getJobId = (event) => {
const { appliedjobs } = this.props
const jobid = event.target.getAttribute('name')
const job = appliedjobs.find( j => j.id == jobid)
const applystatus = job ? job.applystatus : "apply now"
this.setState({ applystatus, jobid })
}
根据作业id查找作业并设置为“状态”,对吗?如果我理解您的代码,您应该执行以下操作:
getJobId = (event) => {
const { appliedjobs } = this.props
const jobid = event.target.getAttribute('name')
const job = appliedjobs.find( j => j.id == jobid)
const applystatus = job ? job.applystatus : "apply now"
this.setState({ applystatus, jobid })
}
根据作业id查找作业并设置为状态,是否正确?您确定您的函数只执行一次吗?您正在使用:appliedjobs.map
因此您的代码会传递给每个appliedJob,但我想只有一个对应于您的事件当我单击特定任务时,会执行此事件,它获取属性名称并使用作业id进行检查。“使用作业id进行检查”=>实际上是使用this.props.appliedjobs
数组中的所有作业id<代码>地图
正在其上循环。例如:如果在this.props.appliedjobs
中有2个作业
s,并且您的事件.name
==1,则它将与第一个作业匹配(传递到if),然后与第二个作业项不匹配(传递到ELSE)。如果您愿意,我可以回答得更清楚。这个applideJobs
数组是否包含多个元素?在这种情况下,它将为预期的jobId
执行正确的条件,并为您不查找的对象执行另一个子句。您确定您的函数只执行一次吗?您正在使用:appliedjobs.map
,因此您的代码将传递给每个appliedJob,但我认为只有一个对应于您的事件此事件是单击特定任务时执行,该任务获取属性名称并使用作业id进行检查。“使用作业id进行检查”=>事实上,使用this.props.appliedjobs
数组中的所有作业id<代码>地图
正在其上循环。例如:如果在this.props.appliedjobs
中有2个作业
s,并且您的事件.name
==1,则它将与第一个作业匹配(传递到if),然后与第二个作业项不匹配(传递到ELSE)。如果您愿意,我可以回答得更清楚。这个applideJobs
数组是否包含多个元素?在这种情况下,它将为预期的jobId
执行正确的条件,并为您不查找的对象执行另一个子句我尝试了,但它也在执行else部分。。。直到那时我才试过elseifi试过,但它也在执行else部分。。。直到那时我才试过其他方法