Добавить ключ к объекту в определенной позиции в JavaScript - PullRequest
0 голосов
/ 08 июня 2019

Ниже приведен мой код, в котором на основе определенного типа пользователя я хочу добавить дополнительный ключ к объекту в определенной позиции.В настоящее время я буквально дублирую целое, а затем передаю его на стол.Есть ли более чистый способ сделать то же самое?

Код -

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 ]

3 голосов
/ 08 июня 2019

Просто удалите ключи, которые должны быть исключены для недопустимого пользователя:

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

Оператор удаления

0 голосов
/ 08 июня 2019

Я бы так и сделал, комбинация спред и деструктор

myReportsHeader = () => {
    const { valid_user } = this.props;
    const { tableHeaders } = this.props.tableHeaders;
    const { tb4, ...labels } = tableHeaders.labels;

   return valid_user ? {...labels, tb4 } : {...labels};

}
0 голосов
/ 08 июня 2019

Вы можете использовать синтаксис распространения, чтобы избежать дублирования кода.

 const obj = { ...tableLabels }

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

return obj;
0 голосов
/ 08 июня 2019

Что прокомментировал Махер Али должен быть ответ:
Объекты не гарантируют порядок их ключей.Для этого используйте массивы.

Итак, у вас, вероятно, будет

const columns = [tableLabels.tb1, tableLabels.tb3];
if (valid) {
  columns.splice(1, 0, tableLabels.tb2);
}
0 голосов
/ 08 июня 2019

Вы можете сначала создать объект со значениями по умолчанию. Затем добавьте дополнительное свойство, если условие истинно, и, наконец, верните его, например:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...