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

问题描述 投票:0回答:1

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

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

我错过了什么?

javascript ecmascript-6 ecmascript-2017
1个回答
3
投票

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

您应该在forEach()回调中设置一个变量,然后将其返回到循环外部。

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

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

你可以改为使用.find()

var checkedCar = cars.find(car => car.checked);
if (checkedCar) {
    return carOptions[checkedCar.id];
}
© www.soinside.com 2019 - 2024. All rights reserved.