J'essaye de faire une boucle à travers un tableau d'objets (je ne sais pas si c'est une terminoledgy correcte) et je veux changer les valeurs de chaque clé de la liste.

Exemple si j'ai une liste de room1 = 0, room2 = 0, room3 = 0 et après avoir bouclé, ce sera room1 = 10, room2 = 10, room3 = 10.

Je peux le faire avec un tableau, mais je perdrai ensuite les clés, ce qui est très utile lorsque j'utilise le tableau dans d'autres parties de mon programme.

Je comprends que cela a déjà été demandé mais je ne vois pas de solution pour changer les valeurs

Mon code ci-dessous change les valeurs dans la boucle mais le journal de la console en dehors de la boucle montre que room2 est toujours égal à 0

Toute aide s'il vous plaît ou est-ce quelque chose qui ne peut être fait

temps = {room1:0, room2:0, room3:0};
const entries = Object.entries(temps);
for (i=0; i<3; i++){
  entries[i][1] = 10;
  console.log(entries[i]);
}
console.log("room2 = " + temps.room2);
3
Steve8428 20 nov. 2018 à 19:18

5 réponses

Meilleure réponse

Vous pouvez simplement faire une boucle sur les clés, vous ne voulez pas Object.entries dans ce cas car cela ne vous donne pas de référence dans l'objet d'origine:

let temps = {room1:0, room2:0, room3:0};
for (let key in temps) {
  temps[key] = 10
}
console.log(temps)
console.log("room2 = " + temps.room2);
6
Mark Meyer 20 nov. 2018 à 17:36

Utilisez for..in pour parcourir un tableau, mais dans ce cas, créez un nouveau tableau contenant s les nouvelles valeurs (si les nouvelles valeurs sont toutes différentes). Utilisez ensuite Object.keys pour obtenir toutes les clés de l'objet, puis récupérez et mettez à jour la valeur dans l'objet principal

const temps = {
  room1: 0,
  room2: 0,
  room3: 0
}

const newVals = [10, 20, 30]

Object.keys(temps).forEach((key, index) => {
  temps[key] = newVals[index]
})

console.log("room2 = " + temps.room2);
0
Ben Steward 20 nov. 2018 à 16:42

Vous pouvez obtenir une clé d'objet avec Object.keys. Donc, le code est comme ça:

temps = {room1:0, room2:0, room3:0};
for (var key of Object.keys(temps)) {
    temps[key] = 10;
}

Object.keys(temps) renvoie un tableau de valeurs clés. Comme George l'a mentionné dans les commentaires, vous pouvez le faire de manière plus simple sans utiliser Objects.keys. Pour cela, vous pouvez utiliser in au lieu du mot clé of dans le for et passer l'objet temps lui-même. Voici le code:

temps = {room1:0, room2:0, room3:0};
for (var key in temps) {
    temps[key] = 10;
}
0
Mr Alihoseiny 20 nov. 2018 à 16:30

Vous pouvez parcourir chaque clé de l'objet temps et mettre à jour la température directement.

temps = {room1:0, room2:0, room3:0};
for (k in temps) {
  temps[k] = 10
}
console.log("room2 = " + temps.room2);
0
Jim Wright 20 nov. 2018 à 16:23

Le problème que vous avez est que vous modifiez simplement le tableau entries et que cela n'a aucune relation avec le parent. Le changer ne change pas le parent car ce n'est qu'une copie des clés et des valeurs, ce n'est pas une référence à eux.

Vous devez donc modifier l'objet réel. Vous pouvez simplement parcourir les touches et modifier l'objet. Pour chaque boucle, c'est facile.

const temps = {room1:0, room2:0, room3:0};
Object.keys(temps).forEach( function (key) {
  temps[key] = 10;
});
console.log(temps)
2
epascarello 20 nov. 2018 à 16:32