代码之家  ›  专栏  ›  技术社区  ›  Tzar

将for循环转换为forEach不起作用

  •  0
  • Tzar  · 技术社区  · 7 年前

    我有一件物品有一些属性:

    const carOptions = {
      mazda: 25000,  
      tesla: 85000,
      bmw: 100000
    }
    

    for

    for (let i = 0; i < cars.length; i++) {
      if (cars[i].checked) {
        return carOptions[cars[i].id]
      }
    }
    …
    

    .forEach 但是这个代码不起作用:

    cars.forEach(function(cars)) {
      if (cars.checked) {
        return carOptions[cars.id]
      }
    }
    …
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   Barmar    7 年前

    问题是您是从回调函数返回,而不是从包含函数返回。

    您应该在 forEach()

    var checkedOption;
    cars.forEach(car => {
        if (car.checked) {
            checkedOption = carOptions[car.id];
        }
    });
    return checkedOption;
    

    请注意,这并不像 for 循环。一旦找到匹配项,循环将停止并从函数返回。但是没有办法停止 在中间,它将继续测试剩余的汽车。如果有多辆检查过的车, checkedOption 将设置为与最后一个选项相对应的选项,而不是第一个选项。

    .find() :

    var checkedCar = cars.find(car => car.checked);
    if (checkedCar) {
        return carOptions[checkedCar.id];
    }
    
    推荐文章