Javascript перезаписать деструктурированную переменную let - PullRequest
0 голосов
/ 19 июня 2020

Проблема

Можно ли перезаписать несколько переменных, которым назначены let

const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)

Теперь, как можно перезаписать {a, b, c, d} в одном оператор после вызова someFunction с другим аргументом?

Возможные решения

Не работает! (очевидно)

const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)
{a, b, c, d} = somefunction(5)

Работает

Кажется, это работает, но мой более красивый снимет начальную точку с запятой (+ синтаксис сумасшедший)

const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)
;({a, b, c, d} = somefunction(5))

есть другими способами?

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Вам нужно заключить {} в () в стрелочную функцию, у которой нет скобок для группировки операторов:

const somefunction = data => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data});

const {a,b,c,d} = somefunction(3)
console.log(a,b,c,d)

Или используйте {} и верните

const somefunction = data => {
  return {a:1+data, b:2-data, c: 2*data, d: 3+1*data}
};

const {a,b,c,d} = somefunction(3)
console.log(a,b,c,d)

Перезаписать с помощью let:

const somefunction = data => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data});

let {a,b,c,d} = somefunction(3);
console.log(a,b,c,d);

({a,b,c,d} = somefunction(5));

console.log(a,b,c,d);

Перезаписать с помощью var (я бы не стал;))

const somefunction = data => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data});

var {a,b,c,d} = somefunction(3);
console.log(a,b,c,d);

var {a,b,c,d} = somefunction(5);

console.log(a,b,c,d);
1 голос
/ 19 июня 2020

Это некрасиво, но вы можете использовать var вместо let.

const somefunction = (data) => {return {a:1+data, b:2-data, c: 2*data, d: 3+1*data}}

var {a, b, c, d} = somefunction(3)

console.log(a,b,c,d)

var {a, b, c, d} = somefunction(4)

console.log(a,b,c,d)
...