繁体   English   中英

根据条件将值添加到 object 中的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM