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

时间:2018-08-31 10:57:45

标签: 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]
  }
}
…

我想念什么?

1 个答案:

答案 0 :(得分:3)

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

您应该在class MyRegisterSerializer(RegisterSerializer): first_name = serializers.CharField() last_name = serializers.CharField() def get_cleaned_data(self): super(MyRegisterSerializer, self).get_cleaned_data() return { 'username': self.validated_data.get('username', ''), 'password1': self.validated_data.get('password1', ''), 'email': self.validated_data.get('email', ''), 'first_name': self.validated_data.get('first_name', ''), 'last_name': self.validated_data.get('last_name', '') } def save(self, request): adapter = get_adapter() user = adapter.new_user(request) self.cleaned_data = self.get_cleaned_data() adapter.save_user(request, user, self) setup_user_email(request, user, []) user.address = self.cleaned_data.get('address') user.user_type = self.cleaned_data.get('user_type') user.save() return user 回调中设置一个变量,然后在循环外将其返回。

forEach()

请注意,这没有var checkedOption; cars.forEach(car => { if (car.checked) { checkedOption = carOptions[car.id]; } }); return checkedOption; 循环那么有效。一旦找到匹配项,循环将停止并从函数返回。但是没有办法在中间停下for,它将继续测试其余的汽车。而且,如果有多辆托运的汽车,forEach()将被设置为与最后一辆而不是第一辆相对应的选项。

您可以改用checkedOption

.find()