[英]Adding the value to a property in an object based on a condition
有没有更简单的方法来实现下面的代码片段,我有一个 object 基于选择的值,我需要将值添加到一个属性中的一个并将另一个属性设为零。
let obj = {
credit: 0,
debit: 0,
userType: formData.userType.value
};
switch (formData.userType.value) {
case USER_TYPES.NORMAL:
obj = {
...obj,
credit: formData.amount,
};
break;
case USER_TYPES.GREEDY:
obj = {
...obj,
debit: formData.amount,
};
break;
default:
obj = {
...obj,
};
break;
}
console.log(obj)
这应该有效:
const propMap = { [USER_TYPES.NORMAL]: 'credit', [USER_TYPES.GREEDY]: 'debit'};
if (propMap[formData.userType.value]) {
obj[propMap[formData.userType.value]] = formData.amount
}
您可以在声明和初始化obj
变量时直接执行此操作:
let obj = {
credit: formData.userType.value === USER_TYPES.NORMAL && formData.amount || 0,
debit: formData.userType.value === USER_TYPES.GREEDY && formData.amount || 0,
userType: formData.userType.value
}
console.log(obj);
为什么不使用旧的if/else
? obj.usertype
也与formData.userType.value
相同。
let obj = {
credit: 0,
debit: 0,
userType: formData.userType.value
};
if( obj.userType === USER_TYPES.NORMAL ) obj.credit = formData.amount;
else if( obj.userType === USER_TYPES.GREEDY ) obj.debit = formData.amount;
您可以跳过switch
,您只需创建 Object map
到所需的keys
。
例子:
const map = {
USER_TYPES.NORMAL: 'credit',
USER_TYPES.GREEDY: 'debit'
}
const obj = {
credit: 0,
debit: 0,
[map[formData.userType.value]]: formData.amount
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.