Поэтому я использовал Object.assign()
раньше, с некоторым успехом. Однако сейчас у меня проблемы. У меня есть объект:
let stats = {
rounds: 0,
userHits: 0,
userDmgDelt: 0,
userDmgTaken: 0,
userCrits: 0,
userMiss: 0,
userDodge: 0,
mobHits: 0,
mobDmgDelt: 0,
mobDmgTaken: 0,
mobCrits: 0,
mobMiss: 0,
mobDodge: 0,
};
Затем я пытаюсь сделать это:
stats = Object.assign(stats, {
userMiss: userMiss++,
});
Я думал, что использование объекта внутри функции определит его по его старому значению, которое будет равно 0. Я хотел не использовать длинные блоки stats.Stat += 1
а что нет.
userMiss
не является отдельной переменной, поэтому выражение userMiss++
не будет работать. Если вы хотите использовать Object.assign, вам придется использовать
let stats = {
rounds: 0,
userHits: 0,
userDmgDelt: 0,
userDmgTaken: 0,
userCrits: 0,
userMiss: 0,
userDodge: 0,
mobHits: 0,
mobDmgDelt: 0,
mobDmgTaken: 0,
mobCrits: 0,
mobMiss: 0,
mobDodge: 0,
};
stats = Object.assign(stats, {
userMiss: stats.userMiss + 1,
});
console.log(stats);
но почему бы не просто Object.assign
свойство, избегая Object.assign
вообще?
let stats = {
rounds: 0,
userHits: 0,
userDmgDelt: 0,
userDmgTaken: 0,
userCrits: 0,
userMiss: 0,
userDodge: 0,
mobHits: 0,
mobDmgDelt: 0,
mobDmgTaken: 0,
mobCrits: 0,
mobMiss: 0,
mobDodge: 0,
};
stats.userMiss++;
console.log(stats);
stats.
часть должна была быть очевидна для меня. Мне сказали, что использование Object.assign - хороший способ справиться со всем этим. Но, возможно, они имели в виду, когда вы имеете дело с объектами сеанса. В любом случае, спасибо!
ИМХО, это то, что вы пытаетесь сделать:
let stats = {
rounds: 0, userHits: 0, userDmgDelt: 0, userDmgTaken: 0, userCrits: 0, userMiss: 0, userDodge: 0, mobHits: 0, mobDmgDelt: 0, mobDmgTaken: 0, mobCrits: 0, mobMiss: 0, mobDodge: 0,
};
stats = Object.assign(stats, {
userMiss: ++stats.userMiss
});
console.log(stats)
Но это лучший immutable
подход:
let stats = {
rounds: 0, userHits: 0, userDmgDelt: 0, userDmgTaken: 0, userCrits: 0, userMiss: 0, userDodge: 0, mobHits: 0, mobDmgDelt: 0, mobDmgTaken: 0, mobCrits: 0, mobMiss: 0, mobDodge: 0,
};
let newStats = Object.assign({}, stats, {
userMiss: ++stats.userMiss
});
console.log(newStats)
Кроме того, вы можете использовать новейший деструктурирующий object destructuring
ES6 следующим образом:
let stats = {
rounds: 0, userHits: 0, userDmgDelt: 0, userDmgTaken: 0, userCrits: 0, userMiss: 0, userDodge: 0, mobHits: 0, mobDmgDelt: 0, mobDmgTaken: 0, mobCrits: 0, mobMiss: 0, mobDodge: 0,
};
let newStats = { ...stats, userMiss: ++stats.userMiss };
console.log(newStats)
userMiss
- это ключ, определенный в stats
объекта. Итак, чтобы получить доступ к этому свойству, вам нужно написать stats.userMiss
.
stats = Object.assign(stats, {
userMiss: stats.userMiss++,
});
Вы должны использовать ++stats.userMiss
для обновления значения userMiss
let stats = {
rounds: 0,
userHits: 0,
userDmgDelt: 0,
userDmgTaken: 0,
userCrits: 0,
userMiss: 0,
userDodge: 0,
mobHits: 0,
mobDmgDelt: 0,
mobDmgTaken: 0,
mobCrits: 0,
mobMiss: 0,
mobDodge: 0,
};
stats = Object.assign(stats, {
userMiss: ++stats.userMiss
});
console.log(stats)
++stats.userMiss;
без Object.assign
(то, чего ОП хотел избежать).