以下是我的代码,其中我要根据特定的用户类型在对象的特定位置添加一个附加键。目前,我实际上是复制整个副本,然后将其传递给表。有没有一种更干净的方法来做同样的事情?
代码-
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
}
}
答案 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
}
答案 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)
我愿意这样做,spread和destructor的组合
values