关于实际代码中如何用策略模式处理频繁的 if else 的问题
直接上代码吧 都在代码里写清楚了
问题就是
如何把函数中 tabs.filter.forEach 这些几乎相同的逻辑 独立出来 之前学习了策略模式 但是想不到好的方案 请大佬指点一二
let tabs = [{index:0,name:'angelaBaby'},{index:1,'陈冠西'},{index:2,'李bingbing'},{index:3,'范特西'}]
let COMMAND_TYPE_LIST = {
OTHER:'other',
RIGHT:'right',
SELF:'self',
}
/**
* @desc 抽中的成员逻辑
* @param {*} type:string - 抽中的类型
* @param {*} randomIndex:number - 抽中的数组 index
* @example
* 比如 type==='other' randomIndex=1 那么抽中的成员就是 0,2,3
* 比如 type==='right' randomIndex=1 那么抽中的成员就是 2,3
* 比如 type==='self' randomIndex=1 那么抽中的成员就是 1
* @todo
* 如何把 tabs.filter.forEach 这些几乎相同的逻辑 独立出来 之前学习了策略模式 但是想不到好的方案 请大佬指点一二
*/
function checkedPerson(type,randomIndex){
if (type === COMMAND_TYPE_LIST.OTHER) {
//抽中其他
tabs
.filter((item, index) => index !== randomIndex)
.forEach((tab) => {
//循环处理逻辑
})
} else if (type === COMMAND_TYPE_LIST.RIGHT) {
//抽中右侧
tabs
.filter((item, index) => index > randomIndex)
.forEach((tab) => {
//循环处理逻辑
})
} else if (type === COMMAND_TYPE_LIST.SELF) {
//抽中自身
tabs
.filter((item, index) => index === randomIndex)
.forEach((tab) => {
//循环处理逻辑
})
}
}
checkedPerson(COMMAND_TYPE_LIST.OTHER,2)//抽中的成员就是 0,1,3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
解耦最终操作放在外面,可用性更高点
forEach
里面的回调函数又可以抽对应的处理函数