@ivankirshin

Почему не работает деструктуризация?

Столкнулся с проблемой. Мне нужно поменять местами объекты, которые хранятся в массиве во vuex.
replacePuzzles({commit, getters},{first,second}){
        let puzzles = getters.getPuzzles 
        console.log(puzzles[first],puzzles[second])
        [puzzles[first],puzzles[second]] = [puzzles[second],puzzles[first]]

Выводится такая ошибка Cannot set property '#< Object >' of undefined.
Причем, в консоль объекты нормально выводятся. Странно, что если убрать вывод в консоль, то возникает уже другая ошибка: TypeError: Cannot read property '19' of undefined. (19 это значение переменной).
Ума не приложу в чем дело.
Проект тут. Проблемный файл
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
AngReload
@AngReload
Кратко о себе
У вас нет точек с запятой, а сам язык между закрывающей круглой скобкой и открывающей квадратной её не ставит. Ваш код аналогичен такому:

console.log()[puzzles[first],puzzles[second]] = [puzzles[second],puzzles[first]]


Надо так:
replacePuzzles({commit, getters},{first,second}){
        let puzzles = getters.getPuzzles 
        console.log(puzzles[first],puzzles[second])
        ;[puzzles[first],puzzles[second]] = [puzzles[second],puzzles[first]]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Bhudh
Выражение puzzles[first] возвращает результат, поэтому его нельзя использовать в присваивающих выражениях. Потому, кстати, и выводятся в консоль объекты.
А Вы потом этим объектам (а не свойствам!) пытаетесь присвоить друг друга.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы