const assert = require(‘assert’);

const question = ‘实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表’;

// A 关注 B 后,A 和 B 就成为好友关系(即使 B 没有关注 A)
// 某个用户的微博列表,包含他本人和他所有好友的所有微博
// 数据存储在 server 端
// 具体执行逻辑,参见本题的测试部分

class WeiboClient {
/**

  • @param { userId, server } options
    */
    constructor(options) {
    const {userId, server} = options
    this.userId = userId
    this.server = server;
    // this.follows=[]
    this.server.articles[userId] = []
    this.server.follows[userId] = []
    }

// 关注指定用户
follow(userId) {
if(!this.server.follows[this.userId].find(itm=>itm===userId)){
this.server.follows[this.userId].push(userId)
}
// console.log(‘关注成功’,this.userId,’–>’,userId)
}

// 取关指定用户
unfollow(userId) {
this.server.follows[this.userId] = this.server.follows[this.userId].filter(itm=>{
return itm !== userId
})
// console.log(‘取关成功’,this.userId,’–>’,userId)
}

// 发微博
postNewWeibo(content) {
// if(this.server.articles[this.userId]){
// console.log(this.server.articles[this.userId])
this.server.articles[this.userId].push(content)
// }else{
// this.server.articles[this.userId] = [content]
// }
}

}

class WeiboServer {
constructor() {
this.articles = {}
this.follows={}
}

// 获取对应用户微博列表
getWeiboList(userId) {
const list = []
const userIds = [userId,…this.follows[userId]]
// console.log(123123,[…this.follows[userId],userId])
// […this.follows[userId],userId]

  userIds.forEach(itm=>{list.push(...this.articles[itm])})
return list;
// return this.articles[userId]

}
}

/测试部分/
function doTest() {
try {
const wServer = new WeiboServer();
const wClientA = new WeiboClient({
userId: ‘001’,
server: wServer,
});
const wClientB = new WeiboClient({
userId: ‘002’,
server: wServer,
});
const wClientC = new WeiboClient({
userId: ‘003’,
server: wServer,
});

const WEIBO_CONTENT_A = 'Hello World';
const WEIBO_CONTENT_B = '大家好,我是user 002';
const WEIBO_CONTENT_C = '小程序怎么写?';
wClientA.postNewWeibo(WEIBO_CONTENT_A);
wClientB.postNewWeibo(WEIBO_CONTENT_B);
wClientC.postNewWeibo(WEIBO_CONTENT_C);assert.deepStrictEqual(wServer.getWeiboList('001'), [WEIBO_CONTENT_A]);
wClientA.follow('002');
assert.deepStrictEqual(wServer.getWeiboList('001'), [WEIBO_CONTENT_A, WEIBO_CONTENT_B]);
wClientA.follow('003');
assert.deepStrictEqual(wServer.getWeiboList('001'), [WEIBO_CONTENT_A, WEIBO_CONTENT_B, WEIBO_CONTENT_C]);
wClientA.unfollow('002');assert.deepStrictEqual(wServer.getWeiboList('001'), [WEIBO_CONTENT_A, WEIBO_CONTENT_C]);return '通过';

} catch (ex) {
return ‘不通过’+ex;
}
}

console.log(doTest())

实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表相关推荐

  1. 依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...

  2. 用go语言撸一个简易版的区块链

    用go撸一个简易版的区块链 引言 这个最初的版本时多年以前学习go的时候,自己撸的一个简易版本的区块链.不过麻雀虽小,五脏俱全.通过这个代码你了解区块链内部的大概运行机制时没有问题的. 比特币底层区块 ...

  3. DFiddler:A HTTP Packets Listener一个简易版的手机端的Fiddler。

    Diddler A HTTP Packets Listener一个简易版的手机端的Fiddler. Android系统需要Root权限. PIC_20140121_220503_617.jpeg PI ...

  4. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!

    零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...

  5. javascript实现图片轮播_手撸一个简易版轮播图(上)

    手撸一个简易版轮播图 实现原理,通过控制 swiper-warpper 容器的定位来达到切换图片的效果. 页面布局 简易版轮播图 < > 页面样式 .container{width: 60 ...

  6. 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...

    [索引页] [×××] 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 作者:webabcd 介绍 Silverlight 2.0 ...

  7. 【Linux】用进程控制知识做一个简易版shell

    文章目录 什么是shell 图示 分析 代码 什么是shell shell是命令行解释器的统称 当前使用的shell的名字是bash,bash其实也是一个程序 当前我使用的是centos7下实现一个简 ...

  8. 一个简易版的新闻应用(同时兼容手机和平板)

    代码可能有点长,需要耐心看几遍.前前后后我看了5遍才把整个流程吃透,相信你一定比我聪明!!! 新建一个FragmentBestPractice项目 (让ADT帮我们自动创建活动--活动名:MainAc ...

  9. 碎片的最佳实践——一个简易版的新闻应用

    现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有些欠缺,因此又该进入最佳实践环节了. 前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间不能充分利用 ...

最新文章

  1. RESTful之视图集ViewSet
  2. mysql查看连接数 (linux)
  3. ABAP:FTP Using SAP Functions
  4. c# 调用c++DLL方法及注意事项
  5. ubuntu 系统下的Caffe环境搭建
  6. SVPullToRefresh问题解决
  7. 四大浏览器再战Windows平台:Opera勇夺第一
  8. 如何用纯 CSS 创作一个记事本翻页动画
  9. 在线编辑器XhEditor
  10. 一步步写 CMOS 驱动模块 ELDD 学习笔记
  11. Android图片无损缩放,Android图片查看器(图片可挪动、缩放)
  12. BlueCoat被私募股权公司收购
  13. Docker关闭容器命令(docker stop)
  14. linux下载tkinter模块,Linux升级Python提示Tkinter模块找不到解决
  15. PowerBI获取报表使用指标
  16. 对于html的第一次正式作业
  17. 【数据挖掘】数据挖掘概述
  18. ​从小样本学习出发,奔向星辰大海
  19. Noip2017那两天的经历
  20. 值得反复观看的几部电影

热门文章

  1. 利用hibernate中的SchemaExport生成数据表
  2. ubuntu下JDK的自动安装和手动安装
  3. Linux信号实践(2) --信号分类
  4. 磁盘Raid方案简单对比
  5. iOS使用shell脚本注入混淆内容
  6. Riverbed调查:惊人发现95%的中国受访者高度关注应用性能
  7. 《软件建模与设计: UML、用例、模式和软件体系结构》一一3.1 软件生存周期模型...
  8. CSS-垂直|水平居中问题的解决方法总结
  9. [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金
  10. Oracle数据库中的dual表