【问题标题】:How to create an object with variables as keys?如何创建以变量为键的对象?
【发布时间】:2021-11-14 18:02:12
【问题描述】:

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

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

这将根据情况而有所不同。如果某个用户进入 room1,那么应该在那个时候创建​​ room1,并且 value 将为 1,如果其他用户也进入 room2,但如果另一个用户进入 room1,则 value 必须增加到 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


    【解决方案1】:

    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")

    【讨论】:

    • 可能还需要检查密钥是否已经存在:if( numusers[inroom] === undefined ).
    • 很好,但它如何知道每次增加多少房间价值?
    • numusers[inroom] = numusers[inroom]+1
    • @CainNuke 我有点困惑。您想使用for 循环来创建多个房间吗?
    • 谢谢,感谢您对我的问题的帮助。
    【解决方案2】:

    如果不存在则创建键和属性,如果已经存在则将其值加 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>

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多