我有一个带有一些属性的物体:
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]
}
}
…
我想念什么?
答案 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()