我试图遍历一个对象数组(不确定那是否是正确的术语),并想将值更改为列表中的每个键。
例如,如果我有一个房间1 = 0,房间2 = 0,房间3 = 0的列表,并且在我循环浏览后,它将是房间1 = 10,房间2 = 10,房间3 = 10。
我可以使用数组来完成此操作,但是随后会松开键,这在程序其他部分使用数组时非常有帮助。
我知道之前已经有人问过这个问题,但看不到更改值的解决方法
下面的代码更改了循环中的值,但是循环外的控制台日志显示room2仍等于0
请任何帮助,或者这是无法完成的事情
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);
答案 0 :(得分:6)
您可以仅遍历键,在这种情况下,您不需要Object.entries
,因为它没有为您提供对原始对象的引用:
let temps = {room1:0, room2:0, room3:0};
for (let key in temps) {
temps[key] = 10
}
console.log(temps)
console.log("room2 = " + temps.room2);
答案 1 :(得分:2)
您遇到的问题是,您只是在更改entries
数组,而与父级没有任何关系。更改它不会更改父项,因为它只是键和值的副本,而不是对它们的引用。
因此,您需要更改实际对象。您可以仅遍历键并更改对象。 forEach循环很容易。
const temps = {room1:0, room2:0, room3:0};
Object.keys(temps).forEach( function (key) {
temps[key] = 10;
});
console.log(temps)
答案 2 :(得分:0)
您可以使用Object.keys
获取对象键。所以代码是这样的:
temps = {room1:0, room2:0, room3:0};
for (var key of Object.keys(temps)) {
temps[key] = 10;
}
Object.keys(temps)
返回一个键值数组。
正如乔治在评论中提到的那样,您可以以更简单的方式完成此操作,而无需使用Objects.keys
。为此,您可以在in
中使用of
代替for
关键字,并传递temps
对象本身。这是代码:
temps = {room1:0, room2:0, room3:0};
for (var key in temps) {
temps[key] = 10;
}
答案 3 :(得分:0)
您可以遍历temps
对象中的每个键,并直接更新温度。
temps = {room1:0, room2:0, room3:0};
for (k in temps) {
temps[k] = 10
}
console.log("room2 = " + temps.room2);
答案 4 :(得分:0)
使用for..in
遍历一个数组,但是在这种情况下,创建一个保存新值的新数组(如果新值都不同)。然后使用Object.keys
从对象中获取所有键,然后检索并更新主对象中的值
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);