Невозможно изменить значения свойств объекта с помощью цикла for-in

#javascript #vue.js #for-loop #this #javascript-objects

Вопрос:

У меня странная проблема с JavaScript / Vue.js. Я пытаюсь перебрать свойства объекта (NewGame) и изменить их значения на «неопределенные». Они, кажется, принимают значение, когда я консолирую.log() их из цикла for, но как бы «возвращаются» к своим предыдущим значениям после цикла. Я почти уверен, что я что-то упускаю из виду. Свойства NewGame также привязаны к некоторым входным элементам с помощью v-модели. Вот фрагмент кода:

 data() {
    return {
        newGame: {
            id: undefined,
            date: undefined,
            location: undefined,
            length: undefined,
            limit: undefined,
            buyIn: undefined,
            cashOut: undefined
        },
        games: Array
    };
},
methods: {
    addGame() {
        let newGameCopy = { ...this.newGame };
        newGameCopy.id = uuidv4();
        this.games = [...this.games, newGameCopy];

        console.log(this.newGame);

        // This one doesn't work.
        for (let property in this.newGame) {
            console.log(property);
            property = undefined;
            console.log(property);
        }
        console.log(this.newGame);

        // This one works.
        this.newGame.id = undefined;
        this.newGame.date = undefined;
        this.newGame.length = undefined;
        this.newGame.limit = undefined;
        this.newGame.buyIn = undefined;
        this.newGame.cashOut = undefined;
        this.newGame.location = undefined;

        console.log(this.newGame);
    },
}
 

Ответ №1:

Переназначение идентификатора само по себе не будет иметь никаких побочных эффектов (в подавляющем большинстве ситуаций) — если вы не используете идентификатор (здесь property ) позже, присвоение ему чего-либо (например undefined ) не будет иметь никакого эффекта. Вам нужно назначить undefined newGame объекту`, чтобы фактически изменить объект:

 for (let property in this.newGame) {
  this.newGame[property] = undefined;
}
 

Комментарии:

1. Спасибо, теперь я это понимаю, и это отлично работает! 🙂