Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接2个javascript数组_Javascript_Arrays_Static Linking - Fatal编程技术网

链接2个javascript数组

链接2个javascript数组,javascript,arrays,static-linking,Javascript,Arrays,Static Linking,我有2个对象数组:用户和频道。每个用户可以在多个频道中使用。每个频道可以包含许多用户 通道对象示例: {name: "test", visible: true, active: true} {name: "user", ip: '127.0.0.1', sex: 1} 用户对象示例: {name: "test", visible: true, active: true} {name: "user", ip: '127.0.0.1', sex: 1} 脚本必须执行以下操作: 按频道显示用户

我有2个对象数组:用户和频道。每个用户可以在多个频道中使用。每个频道可以包含许多用户

通道对象示例:

{name: "test", visible: true, active: true}
{name: "user", ip: '127.0.0.1', sex: 1}
用户对象示例:

{name: "test", visible: true, active: true}
{name: "user", ip: '127.0.0.1', sex: 1}
脚本必须执行以下操作:

  • 按频道显示用户列表
  • 按用户显示频道列表
  • 所有基本操作(添加/删除/更新用户/频道) 实现这些对象之间链接的更好方法是什么:

  • 用户将包含其频道列表
  • 频道将包含他的用户列表
  • 创建包含user=channel关联的单独对象
  • 或者你的变种

  • 我认为第三种变体会更好。

    正如您所知,有很多方法可以做到这一点,而哪种方法最终取决于您将如何使用、访问和存储数据,而不是您向我们透露的数据。但是,有一种方法是可行的:

    为用户创建对象:

    function user(name, id, ip, sex, channels) {
        this.name = name;
        this.id = id;
        this.channels = channels || [];
        this.ip = ip;
        this.sex = sex;
    
        this.addChannel = function(channel) {
            this.channels.push(channel);
        }
    }
    
    然后,您可以拥有一个用户对象数组,其中每个用户对象都包含有关用户的基本信息和频道列表。此数据结构选择经过优化,可以轻松了解用户所属的频道

    此结构不会优化以了解给定通道中的用户。如果您想从这个数据结构中获得这些信息,您仍然可以计算它,但这需要查找每个用户对象,以找出给定通道中的用户。这是可行的,但不是很快

    如果您需要两种类型的信息(用户所在的频道和用户所在的频道)快速可用,那么您可能需要双重维护两个数据结构,一个数据结构为您提供每个答案。如果您通过方法或助手函数对通道进行所有操作,则它们都可以自动维护


    选择最终取决于您最需要如何访问数据,以及哪些访问类型必须快速。由于您尚未共享该信息,我们无法确定哪种方式更好。

    请显示您当前数据的格式,以便我们提供更具体的想法。例如,什么是频道。这只是一个数字吗?它是一个具有多个属性的对象吗?这是一个字符串吗?@jfriend00,正如我写的——它们是对象数组。我已经将它们的结构添加到问题中。您可以同时使用1和2,然后让添加/删除操作从两个列表中添加/删除。将该方法附加到原型中会更明智。