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

Converting a for loop to forEach not working

我有一个对象有一些属性:

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]
  }
}
…

我错过了什么?

问题是您 return 来自回调函数,而不是包含函数。

您应该在 forEach() 回调中设置一个变量,然后 return 在循环外。

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

请注意,这不如 for 循环有效。一旦找到匹配项,循环将停止并从函数中 return 。但是中途没办法停forEach(),它会一直测试剩下的车。并且如果有多辆被勾选的车,checkedOption将设置为最后一辆对应的选项,而不是第一辆。

您可以改用 .find():

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