Как я могу сделать деструктуризацию объекта с условием? - PullRequest
0 голосов
/ 02 ноября 2018

Итак, у меня есть:

// some function that returns two arrays ..
getArrays() {
  return {
    arr1: [...],
    arr2: [...]
  };
}

// and then ..
let arr1 = [];
let arr2 = [];
if (someCondition) {
  { arr1, arr2 } = getArrays();
}

// here we expect arrays, even if they are empty ..

Конечно, это выдает ошибку. Это вообще возможно?

PS: я могу использовать значения по умолчанию и напрямую вызывать функцию, но все же - я думаю, что это должно быть возможно.

1 Ответ

0 голосов
/ 02 ноября 2018

Одним из решений является завершение выражения деструктурирования круглыми скобками:

// some function that returns two arrays ..
function getArrays() {
  return {
    arr1: [1],
    arr2: [2]
  };
}
const someCondition = true;
let arr1 = [];
let arr2 = [];

if (someCondition) {
  ({ arr1, arr2 } = getArrays());
}

console.log(arr1, arr2);

Другое решение состоит в том, чтобы переместить условие в функцию getArrays(), а если условие false, вернуть два пустых массива:

const getArrays = (condition) =>
  condition ? 
    { arr1: [1], arr2: [2] }
    :
    { arr1: [], arr2: [] };

const someCondition = true;
const { arr1, arr2 } = getArrays(someCondition);

console.log(arr1, arr2);

Вы также можете использовать условие и троицу вне функции:

const getArrays = () => ({ arr1: [1], arr2: [2] });

const someCondition = true;
const { arr1, arr2 } = someCondition ? getArrays() : { arr1: [], arr2: [] };

console.log(arr1, arr2);
...