链接2个javascript数组
我有2个对象数组:用户和频道。每个用户可以在多个频道中使用。每个频道可以包含许多用户 通道对象示例:链接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} 脚本必须执行以下操作: 按频道显示用户
{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}
脚本必须执行以下操作:
我认为第三种变体会更好。正如您所知,有很多方法可以做到这一点,而哪种方法最终取决于您将如何使用、访问和存储数据,而不是您向我们透露的数据。但是,有一种方法是可行的: 为用户创建对象:
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,然后让添加/删除操作从两个列表中添加/删除。将该方法附加到原型中会更明智。