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

标签 javascript ecmascript-6 ecmascript-2017

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

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/

相关文章:

javascript - 在 javascript/jquery 中重复特定时间后添加 div 标签

javascript - 防止污染 JavaScript 中 RegExp 构造函数的属性

javascript - 使用 HTML/JS 或其他 Web 解决方案来渲染旋转的丝带

javascript - 是否可以间接调用 X 是 ES6 类的构造函数?

javascript - 上传文件时显示加载图像

JavaScript - 计算属性 - 深深的困惑

javascript - ES6 Set 允许重复数组/对象

javascript - 将 async/await 与 forEach 循环结合使用

node.js - 如何等待for循环的多个异步调用?