如何创建一个以变量为键的对象?

问题描述 投票:0回答:2

我有一个最初是空的对象,但它最终会看起来像这样:

numusers = { room1 : 1, room2 : 5, room3 : 2};

根据具体情况,这总是会有所不同。如果某个用户进入 room1,那么 room1 应该在此时创建,并且值将为 1,如果其他用户同样进入 room2,但如果另一个用户进入 room1,则该值将必须增加到 2,依此类推。

我试过这个:

    numusers = { room1 : 1, room2 : 5, room3 : 2};
     let initnum = 0; //the initial value each room will have
     var inroom = "room1"; //this is the room this user entered
     numusers.push({ inroom : ++initnum }); 

它不起作用,我想不出其他方法。我应该在这里做什么?

javascript object
2个回答
3
投票

numusers
是一个对象,而不是数组。

如果要设置属性的值,可以使用括号表示法:

let initnum = 0;
var inroom = "room1";
numusers = {};
numusers[inroom] = initnum
console.log(numusers)

要在输入重复键时递增,可以先检查该属性是否存在:

newusers = {}

function process(room){
  newusers[room] = newusers[room] ? newusers[room]+1 : 1;
  console.log(newusers)
}

process("room1")
process("room1")
process("room2")


1
投票

如果键和属性不存在则创建它,如果已经存在则将其值加1。

@Spectric 写的方式绝对更干净:

numusers[inroom] = numusers[inroom] ? numusers[inroom]+1 : 1;

这和我建议的意思一样,直接将房间的钥匙设置为它需要的值,如果存在则加1,如果不存在则创建。

下面我提供了一个带有选择选项的示例。

const numusers = {};
const roomSelect = document.querySelector('#rooms');

roomSelect.addEventListener('change', function() {
  let inroom = this.value;
  numusers[inroom] = numusers[inroom] ? numusers[inroom]+1 : 1;
  console.log(numusers);
});
<select name="room" id="rooms">
  <option value="room1">Room 1</option>
  <option value="room2">Room 2</option>
  <option value="room3">Room 3</option>
</select>

© www.soinside.com 2019 - 2024. All rights reserved.