Разрушение объектов для вызовов функций - PullRequest
7 голосов
/ 21 апреля 2019

Есть ли способ деструктурировать объект JS на месте, вместо присвоения деструктурированных переменных области действия?

Вместо этого:

const { a, b, c } = obj;
someFunction(a, b, c);

Я бы хотел сделать это:

someFunction({a, b, c} from obj);

Или что-то функционально эквивалентное.

Я хотел бы сделать это в ситуациях с этими двумя условиями:

  • Я не хочу помещать имена переменных во вложенную область видимости.

  • Я не хочу передавать весь объект obj, поэтому оператор спреда не является опцией.

Единственная опция, с которой я остаюсь - это использовать

someFunction(obj.a, obj.b, obj.c);

Это нормально в этом случае, но может снизить читабельность, если вместо obj указан длинный идентификатор.

Возможно ли что-то подобное? Я пытался использовать присваивание в выражении в качестве обходного пути, но моя среда IDE жаловалась, что не может найти имена a, b и c:

someFunction({a, b, c} = obj);

Ответы [ 3 ]

6 голосов
/ 21 апреля 2019

Один из вариантов - использовать .map для извлечения значения каждого свойства, которое вы хотите, и распространения его в список аргументов:

someFunction(
  ...['a', 'b', 'c'].map(prop => obj[prop])
);

Разрушение требует создания, к сожалению, промежуточных переменных, которые вам не нужны.

3 голосов
/ 21 апреля 2019

ИИФЭ должен работать:

((({ a, b, c }) => someFunction(a, b, c))(obj);
1 голос
/ 21 апреля 2019

Вот как бы я это сделал:

function foo( { x, y } ) {
	console.log( x, y );
}

foo( { y: 1, x: 2 } );	 // 2 1

Что касается специфического запроса ОП не передавать весь объект (или объявлять переменные в глобальной области видимости).ИМХО было бы наилучшим способом уничтожить объект по переменным в области блока.

const obj = { x: 1, y: 2 }

function foo( x, y ) {
    console.log( x, y );
}

{   let { x, y } = obj;
    foo( x, y );   // 1 2
}

console.log(x) // "ReferenceError: x is not defined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...