我有一个最初是空的对象,但它最终会看起来像这样:
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 });
它不起作用,我想不出其他方法。我应该在这里做什么?
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。
@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>