遍历对象数组并更改值

时间:2018-11-20 16:18:42

标签: javascript

我试图遍历一个对象数组(不确定那是否是正确的术语),并想将值更改为列表中的每个键。

例如,如果我有一个房间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);

5 个答案:

答案 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);