如果在下一个 js 中,如何在内联中打破循环

How to break a loop inside inline if in next js

如果 row.id 不等于 u.tenant_id,我想停止 bedsAssign.map 内的循环,但放置 break; 不起作用。

{tenants.map((row) =>
                 bedsAssign.map(
                   (u) =>
                     row.id !== u.tenant_id && (
                       <MenuItem key={row.id} value={row.id}>
                         {row.fullName}
                       </MenuItem>
                        break; --> not working
                     )
                 )
               )}

您可以在 map 之前添加 filter 以删除所有 bedsAssign 与当前 row.id

不匹配的项目
{
  tenants.map((row) =>
    bedsAssign
      .filter((u) => row.id !== u.tenant_id)
      .map((u) => (
        <MenuItem key={row.id} value={row.id}>
          {row.fullName}
        </MenuItem>
      ))
  )
}

如果你想打破循环,你可以尝试使用 somefind 并为 map

使用适当的 return
{
  tenants.map((row) => {
    const isAssigned = bedsAssign.some((u) => row.id !== u.tenant_id)
        return isAssigned ? (<MenuItem key={row.id} value={row.id}>
          {row.fullName}
        </MenuItem>) : null    
  })
}

您不能中断任何数组方法,例如 forEach、filter、map 等。如果您遇到需要中断循环的情况,那么您应该使用传统的 for 循环。

使用 filter 而不是 map 进行床位分配:


{tenants.map((row) =>
                 bedsAssign.filter(
                   (u) =>
                     row.id !== u.tenant_id && (
                       <MenuItem key={row.id} value={row.id}>
                         {row.fullName}
                       </MenuItem>
                     )
                 )
               )}

过滤器将只填写满足您所需条件的项目。

编辑:我注意到你想在满足条件后中断,这在这种情况下有效:

{tenants.map((row) =>
                 for(let i of bedsAssign){
                     if(row.id !== i.tenant_id && (
                       <MenuItem key={row.id} value={row.id}>
                         {row.fullName}
                       </MenuItem>
                     )){
                         break
}
}
                 )
               )}