我有一个具有一些属性的对象:
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]
}
}
…
我错过了什么?
最佳答案
问题在于您是从回调函数返回,而不是从包含函数返回。
您应该在 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];
}
关于javascript - 将 for 循环转换为 forEach 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113986/