Voici un exemple que vous pouvez taper dans votre console. Super nouveau à JavaScript. L'exemple est reproductible en ouvrant un nouvel onglet et en tapant sur une console (la fonction de console de JSX Fiddle est en version bêta, donc je ne sais pas si elle peut être approuvée) quoi J'ai l'intention de faire, c'est que pour l'index 0ème seul, définissez les minuteries étrangement, après avoir exécuté la boucle, je vois Pour tout J'ai regardé l'objet P> Code> Questions relatives à un concept appel "gel", pas sûr d'avoir mes bases de droite. P> Edit: Je pense que cela est associé à la référence d'objet modifiée .. p> p> [0] ["starttime"] code> comme date.now () code>, et pour le reste> et pour le reste , laissez le starttime code> être null code> tel que défini dans le TimerObj code>. p> i code>, le date.now () code> a été défini. Je comprends que les objets JavaScript sont mutables, mais pourquoi sont pourquoi tous les indices sont définis sur DATE.NOW () CODE>? P>
3 Réponses :
JavaScript ne copie pas d'objets. Il passe des références autour, de sorte que lorsque vous assignez Pour corriger cette force une copie: Cela permettra de sérialiser votre De cette façon, vous vous retrouvez avec des copies de minuterie [i] = TimerObj code> une fois, alors vous attribuez date.now () code> une fois, cette valeur va à votre unique TimeOrobj code>. Toutes les affectations ultérieures de TimerObj CODE> à TIMERS [I] CODE> pour tous i code> se réfectez au Single TimerObj CODE> Vous avez défini. < / p>
minuterie [i] = json.parse (json.stringify (TimerObj)); code> p>
TimerObj CODE> à une chaîne JSON, puis convertissez-le à un nouvel objet JavaScript, puis affectez le nouvel objet à TIMERS [I] CODE>. p>
TimerObj code> dans chaque emplacement de votre TIMERS CODE> Array. P>
var clothing = ['card0', 'card1', 'card2', 'card3'];
var timers = {}
var timerObj = {"startTime": null, "pauseTime": null, "elapsedTime": null, "hasSubmitted": false} //Nested object I want for all indices, will manipulate 0th index alone inside for loop
for (var i = 0; i < clothing.length; i++) {
timers[i] = Object.assign({}, timerObj)
if (i == 0) {
timers[i]["startTime"] = Date.now();
}
}
console.log(timers) Vous devez cloner votre p> objet code>. Il y a plusieurs façons de cloner. On serait opérateur répandu (...) code>. Comme ci-dessous: let clothing = ['card0', 'card1', 'card2', 'card3'];
let timers = {}
let timerObj = {"startTime": null, "pauseTime": null, "elapsedTime": null, "hasSubmitted": false}
clothing.forEach((val, i)=>{
timers[i] = {...timerObj};
if(i==0){
timers[i].startTime = Date.now()
}
});
console.log(timers);