@Ivanushka255

Вложенной деструктуризации массива не существует?

Как я понял, вложенная деструктуризация есть только у Object. Например:
let obj = {
    food: {
        apple: 30,
        onion: 15, 
        cabbage: 10
    },
    clothes: ['skirt', 'dress', 'trousers']
};
let {food: {apple: food1, onion: food2, cabbage: food3}, clothes: [clothes1, clothes2, clothes3]} = obj;

Массив можно вложенно деструктуризировать только если он вложен в Object. В примере ниже нельзя вложенные эл-ты массива - apple, plum - положить в отдельные переменные.
let arr = [['apple', 'plum', 'watermelon'], ['vodka', 'water', 'lemonade']];
let [0: [fruit1, fruit2, fruit3]] = arr; //Uncaught SyntaxError: Invalid destructuring assignment target

То есть вложенная деструктуризация доступна только для Object?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
let [0: [fruit1, fruit2, fruit3]] = arr; //Uncaught SyntaxError: Invalid destructuring assignment target

Скажите, а когда массив создаёте, вы тоже индексы явно прописываете? Ну вот и тут не надо.
А если надо пропустить какие-то индексы - просто добавьте запятых:

const arr = [
  [ 1, 2, 3 ],
  [ 5, 6, 7 ],
  [ 7, 8, 9 ],
];

const [ , [ , val1 ], [ ,, val2 ] ] = arr;

console.log(val1, val2); // 6 9

Или можно заменить квадратные скобки фигурными - массив это тоже объект.
Так что и деструктурировать его как обычный объект не возбраняется:

const arr = [
  [ 1, 2, 3 ],
  [ 5, 6, 7 ],
  [ 7, 8, 9 ],
];

const { 1: { 1: val1 }, 2: { 2: val2 } } = arr;

console.log(val1, val2); // 6 9
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Просто не нужно индекс указывать: let [[fruit1, fruit2, fruit3]] = arr;
Если вам нужен конкретный индекс и вы хотите получить его именно через вложенный деструкт, то все индексы до него нужно перечислить в виде пустых массивов: let [[], [fruit1, fruit2, fruit3]] = arr;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект