知道何时使用循环或映射

knowing when to use a loop or map

尝试通过编码 (React) 学习,我的问题是:React 到处都使用 map() ,所以我们可以用 map 替换每个循环,例如 for 循环吗? 什么时候用 map 什么时候用 for loop 好?在下面的示例中,我使用了 for 循环,我应该使用 map 吗?

如何将其更改为地图?:

 const links = currentLinks;
      for (let i = 0; i < links.length; ++i) {
        let border = links[i].boundary.points;
        drawPath(canvas, ctx, border, '#AA1111', '#AA1111', 0.2);
      }
      
      
      
      -----------------
      
      links.map(() => (
      ?
      
      ));

这是一个偏好问题,但在我看来,大量使用循环意味着某人经验不足。主要区别在于,在使用循环时需要保持 state。当你使用 state 时,你需要为它想一个名字——不管你信不信——这有时是最难的部分。另一方面,.map().filter().reduce() 等只是表达式。

使用你喜欢的任何东西,但要明智地使用它。

话虽这么说,但有时使用循环更有意义。经验法则是,每当您的代码产生某种 副作用 时,使用循环更合乎逻辑。考虑这两个例子:

for (const fruit of fruits) {
    draw(fruit);
}

// or:

fruits.forEach(
    fruit => draw(fruit) // makes sense
);

// vs.

fruits.map(
    fruit => draw(fruit)
);

所有人都会工作并做同样的事情,但最后一个是相当业余的。它 return 是一个包含任何 draw() return 的数组,并且从未使用过 return 值,因此失去了使用表达式的目的。

总结一下:

  • 表情?使用 .map()
  • 副作用?使用循环

map => 用于转换或投影 - 它提供了一个新集合

loops => 用于执行某些操作(在集合本身或一般情况下)- 它不会 return 任何东西

例如

const data = [1, 2, 3, 4, 5]

您想获得数组中每个数字的双倍数

const doubled = data.map((number, index) => number * 2);

//-- Output 

[2, 4, 6, 8, 10]

如果项目介于 2 和 5 之间,您想调用一些方法(或执行一些操作)

data.forEach(number => { 
    if(number > 2 && number < 5){
        //call some method
    }
    else{
        //..... do some other work
    }
}

for(let i=0; i< data.length; i++){
    const number = data[i];
    if(number > 2 && number < 5){
        //call some method
    }
    else{
        //..... do some other work
    }
}

我知道这些例子是做作的,不是很好,但我希望你能明白我的意思。如果您有任何疑问,请在评论中告诉我

更新 对于您的情况,您可以使用如下地图

links.map(link => {
  let border = link.boundary.points;
  drawPath(canvas, ctx, border, '#AA1111', '#AA1111', 0.2);
});

首先也是最重要的,如果你知道你需要早点突破,那么你需要使用循环,因为你不能 return 早点使用 forEach 和 map(不使用过滤器之类的东西)。

同样针对 React,如果状态或属性发生变化,您将获得 re-render。使用 map 将创建一个新数组(至少是对数组的引用),这将为您提供通常需要的 re-render。