You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何创建多对多引用实现用户关注逻辑

JavaScript 实现多对多用户关注关系方案

要实现双向绑定的多对多关注关系,同时支持类.append()的集合调用风格,核心是自定义封装关系集合,自动维护双向关联,避免手动操作两边数据导致不一致。

核心实现

我们可以继承JS原生的Set来实现专属的关系集合——Set本身自带值去重特性,天然适合存储关注关系(不会出现重复关注的脏数据),在此基础上扩展append方法自动同步双向关系:

class FollowRelationSet extends Set {
  constructor(owner, type) {
    super();
    this.owner = owner; // 集合所属的用户实例
    this.type = type; // 标记集合类型:followers=粉丝列表,following=关注列表
  }

  append(target) {
    // 边界处理:不能关注自己
    if (target === this.owner) throw new Error("无法关注自己");
    // 已存在关系直接返回,避免重复操作
    if (this.has(target)) return this;

    if (this.type === "followers") {
      // 给当前用户粉丝列表加目标 = 目标用户关注当前用户
      super.add(target);
      target.following.add(this.owner);
    } else if (this.type === "following") {
      // 给当前用户关注列表加目标 = 当前用户关注目标用户
      super.add(target);
      target.followers.add(this.owner);
    }

    return this; // 支持链式调用
  }

  // 配套实现取消关注方法,逻辑和append反向
  remove(target) {
    if (!this.has(target)) return this;
    if (this.type === "followers") {
      super.delete(target);
      target.following.delete(this.owner);
    } else if (this.type === "following") {
      super.delete(target);
      target.followers.delete(this.owner);
    }
    return this;
  }
}

接下来定义User类,初始化时自动创建粉丝和关注两个关系集合:

class User {
  constructor(username) {
    this.username = username;
    this.followers = new FollowRelationSet(this, "followers");
    this.following = new FollowRelationSet(this, "following");
  }
}

使用效果

完全支持你需要的调用风格,双向关系会自动维护,不需要手动操作两边数据:

const user = new User("user");
const other = new User("other");

// 调用你期望的方法:给user的粉丝列表追加other = other关注user
user.followers.append(other);

console.log(user.followers.has(other)); // true
console.log(other.following.has(user)); // true 双向关系自动同步

// 如果要实现user关注other,语义化调用如下
user.following.append(other);
console.log(user.following.has(other)); // true
console.log(other.followers.has(user)); // true

注意事项

  • 所有关系的增删操作请统一走append/remove方法,不要直接用Set原生的add/delete,否则会破坏双向关联的一致性
  • 上述实现是符合通用语义的设计:followers存所有关注当前用户的粉丝,following存当前用户主动关注的对象。如果你硬要让user.followers.append(other)的语义是user关注other,只需要调整append方法内的同步逻辑即可,但非常不推荐这种语义和属性名脱节的设计,后续维护极易出bug。

内容的提问来源于stack exchange,提问作者Giuliano Mirabella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:57:17