实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表
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 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表相关推荐
- 依赖注入[5]: 创建一个简易版的DI框架[下篇]
为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...
- 用go语言撸一个简易版的区块链
用go撸一个简易版的区块链 引言 这个最初的版本时多年以前学习go的时候,自己撸的一个简易版本的区块链.不过麻雀虽小,五脏俱全.通过这个代码你了解区块链内部的大概运行机制时没有问题的. 比特币底层区块 ...
- DFiddler:A HTTP Packets Listener一个简易版的手机端的Fiddler。
Diddler A HTTP Packets Listener一个简易版的手机端的Fiddler. Android系统需要Root权限. PIC_20140121_220503_617.jpeg PI ...
- 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...
- javascript实现图片轮播_手撸一个简易版轮播图(上)
手撸一个简易版轮播图 实现原理,通过控制 swiper-warpper 容器的定位来达到切换图片的效果. 页面布局 简易版轮播图 < > 页面样式 .container{width: 60 ...
- 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...
[索引页] [×××] 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 作者:webabcd 介绍 Silverlight 2.0 ...
- 【Linux】用进程控制知识做一个简易版shell
文章目录 什么是shell 图示 分析 代码 什么是shell shell是命令行解释器的统称 当前使用的shell的名字是bash,bash其实也是一个程序 当前我使用的是centos7下实现一个简 ...
- 一个简易版的新闻应用(同时兼容手机和平板)
代码可能有点长,需要耐心看几遍.前前后后我看了5遍才把整个流程吃透,相信你一定比我聪明!!! 新建一个FragmentBestPractice项目 (让ADT帮我们自动创建活动--活动名:MainAc ...
- 碎片的最佳实践——一个简易版的新闻应用
现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有些欠缺,因此又该进入最佳实践环节了. 前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间不能充分利用 ...
最新文章
- RESTful之视图集ViewSet
- mysql查看连接数 (linux)
- ABAP:FTP Using SAP Functions
- c# 调用c++DLL方法及注意事项
- ubuntu 系统下的Caffe环境搭建
- SVPullToRefresh问题解决
- 四大浏览器再战Windows平台:Opera勇夺第一
- 如何用纯 CSS 创作一个记事本翻页动画
- 在线编辑器XhEditor
- 一步步写 CMOS 驱动模块 ELDD 学习笔记
- Android图片无损缩放,Android图片查看器(图片可挪动、缩放)
- BlueCoat被私募股权公司收购
- Docker关闭容器命令(docker stop)
- linux下载tkinter模块,Linux升级Python提示Tkinter模块找不到解决
- PowerBI获取报表使用指标
- 对于html的第一次正式作业
- 【数据挖掘】数据挖掘概述
- ​从小样本学习出发,奔向星辰大海
- Noip2017那两天的经历
- 值得反复观看的几部电影
热门文章
- 利用hibernate中的SchemaExport生成数据表
- ubuntu下JDK的自动安装和手动安装
- Linux信号实践(2) --信号分类
- 磁盘Raid方案简单对比
- iOS使用shell脚本注入混淆内容
- Riverbed调查:惊人发现95%的中国受访者高度关注应用性能
- 《软件建模与设计: UML、用例、模式和软件体系结构》一一3.1 软件生存周期模型...
- CSS-垂直|水平居中问题的解决方法总结
- [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金
- Oracle数据库中的dual表