javascript - javascript 集合 - 向集合内对象中的数组添加值
问题描述
我正在尝试制作一组集合来制作这样的东西
{
'user1': ["value#1", "value#2",..."value#N"],
'user2': ["value#2",..."value#N"],
'userN': [..."value#N"]
}
然后value#x
在 5 秒后删除(例如)。
这是我的代码:
var myset = new Set();
var ran = myset[USERID] = commandNumber;
//i'm trying to make "if myset contains userNumber AND commandName" return,
//if its not, run someFunction() and continue
if (myset.has(ran)) return;
someFunction();
myset.add(ran);
setTimeout(() => {
myset.delete(ran);
}, 5000);
而不是像第一个代码那样得到输出,而是得到这个输出
Set { 'command1', 'command2',
'USER1': 'command3',
'USER2': 'command4'
'USERN': 'commandN'
}
如果您有任何问题,请随时发表评论,如果我的问题难以理解,请见谅
解决方案
不需要为此目的的 Set,但我做了一个小型 POC,可以帮助您实现所需的解决方案:
'use strict';
const mySet = new Set();
const mySetMetadata = {};
const removeFromSet = (userKey, commandName) => {
const commands = mySetMetadata[userKey] || [];
if (commands.includes(commandName)) {
mySetMetadata[userKey] = commands.filter(c => c !== commandName);
if (mySetMetadata[userKey].length === 0) {
mySet.delete(userKey);
mySetMetadata[userKey] = undefined;
}
}
};
/**
* Add relation between an userKey and a command
* @param {String} userKey
* @param {Array} commands Array of commands
*/
const addToSet = (userkey, commands) => {
mySet.add(userkey);
if (typeof mySetMetadata[userkey] === 'undefined') {
mySetMetadata[userkey] = commands;
} else {
mySetMetadata[userKey] = [...mySetMetadata[userKey], ...commands]
}
}
// Populate with demo data
addToSet('user1', ['value#1', 'value#2', 'value#N']);
addToSet('user2', ['value#2', 'value#N']);
addToSet('user3', ['value#N']);
// Set up a timeout for a given user + key
setTimeout(() => {
removeFromSet('user1', 'value#2');
}, 5000);
推荐阅读
- blockchain - 错误:地址无效(arg="",coderType="address",value=[0])
- macos - 为什么我的终端不能运行 icecast.xml 代码?
- algorithm - 基于人们的选择形成具有不同能力的群体的算法| 具有挑战性的
- excel - VBA循环遍历不确定的文本块
- python - 在没有 parseurl 的情况下分隔 url 的域和顶级域
- javascript - 如何在 JavaScript .filter() 中使用多个条件?
- sql - SQL - T-SQL Pivot 返回 NULL
- python - 如何确定使用皮萨诺周期计算斐波那契数之和的最后一位数字的范围?
- javascript - 在 Flask App 中使用按键(不提交)动态生成超链接
- palantir-foundry - Contour 是否支持正则表达式过滤?