Деструктуризация в операторе возврата

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

  getVariables() {
    const {
      allowCustomValues,
      budgets,
      budgetsToAdd,
      budgetsToRemove,
      isGlobal,
      isRequired,
      name,
      tagTypeId,
      valuesToAdd,
      valuesToDelete,
    } = this.props;

    return {
      allowCustomValues,
      budgets,
      budgetsToAdd,
      budgetsToRemove,
      isGlobal,
      isRequired,
      name,
      tagTypeId,
      valuesToAdd,
      valuesToDelete,
    };
  }

Это кажется очень громоздким, но более короткое решение включает предварение каждой переменной, которую я хочу, с помощью this.props., что на самом деле не лучше с точки зрения обслуживания.

Я хотел бы что-то вроде:

  getVariables() {
    return this.props.{
      allowCustomValues,
      budgets,
      budgetsToAdd,
      budgetsToRemove,
      isGlobal,
      isRequired,
      name,
      tagTypeId,
      valuesToAdd,
      valuesToDelete,
    };
  }

Есть ли какой-то синтаксис ES6, который позволяет мне сделать этот код немного более СУХИМ?

EDIT: возможно, дубликат деструктуризации ES6 в операторе return , но у него есть принятый ответ, который не решает проблему.


person Ecksters    schedule 03.10.2018    source источник
comment
Нет, нет. Хотя есть разные предложения.   -  person Bergi    schedule 03.10.2018
comment


Ответы (3)


На самом деле деструктуризация не позволяет этого.

Вы спрашиваете об эквиваленте для pick() lodash. Возможно, у вас уже есть lodash в вашем проекте. Если вы этого не сделаете, вы все равно можете написать такой помощник самостоятельно (но лучше использовать стабильную проверенную сообществом версию из lodash или другой библиотеки)

person skyboyer    schedule 03.10.2018
comment
Что ж, на самом деле это очень хороший ответ, так как у нас есть Lodash, спасибо! - person Ecksters; 03.10.2018
comment
Однако, вероятно, стоит отметить, что этот метод не проверяется линтером и гораздо менее эффективен из-за создания большого количества строковых литералов. - person Ecksters; 04.10.2018
comment
Но это не совсем lodash pick(), потому что, используя pick, вам все равно придется повторяться, как при уничтожении каждого реквизита, так и при назначении всех реквизитов одному var. - person RegarBoy; 07.08.2020
comment
@RegarBoy не уверен в вашем случае, OP попросил деструктурировать объект только для возврата меньшего подмножества ключей. Конечно, если вам нужно сделать дополнительные операции с каждым или некоторыми свойствами, _.pick будет недостаточно. - person skyboyer; 08.08.2020

Почему бы просто не использовать Object.assign()?

    return Object.assign({}, this.props);

Это создаст новый пустой объект, а затем скопирует в него все перечисляемые свойства из this.props. Целевой объект возвращается функцией Object.assign(), так что практически всю работу выполняет он.

person Pointy    schedule 03.10.2018

Как насчет

return {...this.props}

person Martin    schedule 03.10.2018
comment
Что, если мне не нужны все реквизиты, а только определенные? В этом весь смысл деструктуризации. - person Ecksters; 03.10.2018