在JavaScript中特定位置的对象上添加键

时间:2019-06-08 06:46:38

标签: javascript reactjs ecmascript-6

以下是我的代码,其中我要根据特定的用户类型在对象的特定位置添加一个附加键。目前,我实际上是复制整个副本,然后将其传递给表。有没有一种更干净的方法来做同样的事情?

代码-

myReportsHeader = () => {
    const { valid_user } = this.props;
    const { tableHeaders } = this.props.tableHeaders
    const { labels: tableLabels } = tableHeaders
    if (valid_user) {
        return {
            tb1: tableLabels.tb1,
            tb2: tableLabels.tb2,
            tb3: tableLabels.tb3,
            tb4: tableLabels.tb4, // Add only if valid_user
            tb5: tableLabels.tb5,
            tb6: tableLabels.tb6,
            tb7: tableLabels.tb7,
            tb8: tableLabels.tb8,
            tb9: tableLabels.tb9,
            tb10: tableLabels.tb10
        }
    }
    return {
        tb1: tableLabels.tb1,
        tb2: tableLabels.tb2,
        tb3: tableLabels.tb3,
        tb5: tableLabels.tb5,
        tb6: tableLabels.tb6,
        tb7: tableLabels.tb7,
        tb8: tableLabels.tb8,
        tb9: tableLabels.tb9,
        tb10: tableLabels.tb10
    }
}

5 个答案:

答案 0 :(得分:3)

仅删除无效用户必须排除的密钥:

myReportsHeader = () => {
  const { valid_user } = this.props;
  const { tableHeaders } = this.props.tableHeaders
  const { labels: tableLabels } = tableHeaders
  if (!valid_user) {
    delete tableLabels['tb4']
  }
  return tableLabels
}

Delete operator

答案 1 :(得分:0)

您可以首先使用默认值构造一个对象。然后,如果条件为true,则添加其他属性,最后返回它,例如:

const obj = {
    tb1: tableLabels.tb1,
    tb2: tableLabels.tb2,
    tb3: tableLabels.tb3,
    tb5: tableLabels.tb5,
    tb6: tableLabels.tb6,
    tb7: tableLabels.tb7,
    tb8: tableLabels.tb8,
    tb9: tableLabels.tb9,
    tb10: tableLabels.tb10
};

if (valid_user) {
    obj.tb4 = tableLabels.tb4, // Add only if valid_user
}

return obj;

答案 2 :(得分:0)

Maheer Ali commented应该是什么答案:
对象不保证其键的顺序。 为此,请使用数组。

所以,您可能会拥有

const columns = [tableLabels.tb1, tableLabels.tb3];
if (valid) {
  columns.splice(1, 0, tableLabels.tb2);
}

答案 3 :(得分:0)

您可以使用扩展语法来避免重复代码。

 const obj = { ...tableLabels }

if (!valid_user) {
    // Delete tb4 if user is invalid
    delete obj.tb4;
}

return obj;

答案 4 :(得分:0)

我愿意这样做,spreaddestructor的组合

values