Javascript 尝试使用map方法而不是使用React-Typescript的for循环

Javascript 尝试使用map方法而不是使用React-Typescript的for循环,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我尝试使用map方法use而不是for循环,在下面的代码中使用React-Typescript,但不起作用 使用for循环的实际代码: renderFunction(perkProgressData) { let tiers = []; let currentData = { item: {} } const data = perkProgressData.perkProgressData if (data && data.program &

我尝试使用map方法use而不是for循环,在下面的代码中使用React-Typescript,但不起作用

使用for循环的实际代码:

renderFunction(perkProgressData) {
    let tiers = [];
    let currentData = { item: {} }
    const data = perkProgressData.perkProgressData
    if (data && data.program && data.program.tiers) {
      tiers = data.program.tiers
      **for (let i = 0; i < tiers.length; i++) {**
        if (tiers[i].tierPerks[0].perkStatus === "UNCLAIMED" ||
          data.currentTierId === tiers[i].tierId) {
          currentData = { item: tiers[i] }
          break;
        }
      }
    }

map
在这里不是正确的选择,您不需要它创建的新数组。另外,您希望提前停止,这是
map
无法做到的(除非抛出错误)

<> > <>代码>循环,虽然您不使用索引:

,但是您可以考虑< <代码> > <代码> >
renderFunction(perkProgressData) {
    let tiers = [];
    let currentData = { item: {} };
    const data = perkProgressData.perkProgressData;
    if (data && data.program && data.program.tiers) {
      tiers = data.program.tiers;
      for (const tier of tiers) {
        if (tier.tierPerks[0].perkStatus === "UNCLAIMED" ||
          data.currentTierId === tier.tierId) {
          currentData = { item: tier };
          break;
        }
      }
    }
    // ...
或者,如果循环后不需要

renderFunction(perkProgressData) {
    let currentData = { item: {} };
    const data = perkProgressData.perkProgressData;
    if (data && data.program && data.program.tiers) {
      for (const tier of data.program.tiers) {
        if (tier.tierPerks[0].perkStatus === "UNCLAIMED" ||
          data.currentTierId === tier.tierId) {
          currentData = { item: tier };
          break;
        }
      }
    }
    // ...
如果您真的想使用数组方法,那么:

renderFunction(perkProgressData) {
    const data = perkProgressData.perkProgressData
    let currentData =
      ( data &&
        data.program &&
        data.program.tiers &&
        data.program.tiers.find(tier =>
          tier.tierPerks[0].perkStatus === "UNCLAIMED" || data.currentTierId === tier.tierId
        )
      ) ||  { item: {} };
    // ...

没有理由在该代码中使用
map
。您不需要它创建的新数组。MAP返回一个新数组,但for循环不返回。你需要新的数组吗?如果出于某种原因你不想在循环中使用
,你可以使用
forEach
,但绝对不能使用
map
。是的,最好在循环中使用
forEach
case@Konstantin-嗯,OP希望尽早打破循环(至少,他们正在替换的代码是这样的),因此,这将更像是一件
事。但实际上,他们所做的是在数组中查找某些内容,所以
find
。但令人不安的是,在过去的18-24个月里,我看到了很多这种“
map
作为循环数组的一般方式”的误解。一定是有人教错了。非常感谢你帮助我T.J.克劳德,这很有效
renderFunction(perkProgressData) {
    const data = perkProgressData.perkProgressData
    let currentData =
      ( data &&
        data.program &&
        data.program.tiers &&
        data.program.tiers.find(tier =>
          tier.tierPerks[0].perkStatus === "UNCLAIMED" || data.currentTierId === tier.tierId
        )
      ) ||  { item: {} };
    // ...