Javascript 执行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) {

我有一个if条件,它会改变状态值,而else部分会为状态指定一个不同的值。但两人都在被处决。如何避免这种情况

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部分。。。直到那时我才试过其他方法