求大量范围型if else代码的优化思路

weixin_39354423 2019-07-26 10:53:33
最近写了一段根据滚轮值修改路由的代码。
十分臃肿,代码全是重复的if else 只有参数的下标一直在递增,请问有什么办法缩减优化吗??
代码片段如下:
if (scrollValue < scrollArr[0].split(':')[1]) {
if (this.props.match.params.anchor != scrollArr[0].split(':')[0]) {
this.props.history.push('/accountManage/' + scrollArr[0].split(':')[0]); // 0
}
} else if (scrollValue < scrollArr[1].split(':')[1]) {
if (this.props.match.params.anchor != scrollArr[1].split(':')[0]) {

this.props.history.push('/accountManage/' + scrollArr[1].split(':')[0]); //1
}
} else if (scrollValue < scrollArr[2].split(':')[1]) {
if (this.props.match.params.anchor != scrollArr[2].split(':')[0]) {

this.props.history.push('/accountManage/' + scrollArr[2].split(':')[0]); //2
}
} else if (scrollValue < scrollArr[3].split(':')[1]) {
if (this.props.match.params.anchor != scrollArr[3].split(':')[0]) {
this.props.history.push('/accountManage/'+ scrollArr[3].split(':')[0]); // 3
}

} else if (scrollValue < scrollArr[4].split(':')[1]) {
if (this.props.match.params.anchor != scrollArr[4].split(':')[0]) {
this.props.history.push('/accountManage/'+ scrollArr[4].split(':')[0]);// 4
}
}else ..............................
...全文
154 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
J_Vernon 2019-07-26
  • 打赏
  • 举报
回复
用foreach循环遍历,https://www.runoob.com/jsref/jsref-foreach.html
但是这个地址只是一个思路,你也可以在网上查找foreach的其他写法
weixin_39354423 2019-07-26
  • 打赏
  • 举报
回复
引用 4 楼 J_Vernon 的回复:
https://www.runoob.com/jsref/jsref-foreach.html
大佬你好,我这个是范围型的if判断,不是单一的某个值,用遍历的方式去处理应该不对吧。
weixin_39354423 2019-07-26
  • 打赏
  • 举报
回复
目前我用了新的办法,已经解决了。 改造如下: for(var i =0;i<scrollArr.length;i++){ var menu = scrollArr[i].split(':')[0]; var nextScroleNum =parseInt(scrollArr[i].split(':')[1]); if(scrollValue<nextScroleNum){ this.goHash(menu).bind(this); } } 当if条件满足时,直接去执行另一个函数。这样就不会继续循环下去了。。。并不知道原理。。
J_Vernon 2019-07-26
  • 打赏
  • 举报
回复
https://www.runoob.com/jsref/jsref-foreach.html
weixin_39354423 2019-07-26
  • 打赏
  • 举报
回复
引用 2 楼 潇湘忆梦 的回复:
用for循环没有问题的,或者提取出来一个函数调用也可以的,我用了for循环

 for (var i = 0; i < scrollArr.length; i++)
        {
            var menu = scrollArr[i].split(':')[1];
            var nextScroleNum = scrollArr[i].split(':')[0];
            if (scrollValue < menu) {
                if (this.props.match.params.anchor != nextScroleNum) {
                    this.props.history.push('/accountManage/' + nextScroleNum);    // 0
                    continue;
                }
            }
        }
大佬我实际运行中似乎有问题,这个方法是放在滚轮监听事件中的,每次滚轮值变动都会去跑这个for,但是调试的时候发现每次跑完一个循环,即使我没有再触发这个事件,这个滚轮值会一直在增加。很是奇怪
潇湘忆梦 2019-07-26
  • 打赏
  • 举报
回复
用for循环没有问题的,或者提取出来一个函数调用也可以的,我用了for循环

 for (var i = 0; i < scrollArr.length; i++)
        {
            var menu = scrollArr[i].split(':')[1];
            var nextScroleNum = scrollArr[i].split(':')[0];
            if (scrollValue < menu) {
                if (this.props.match.params.anchor != nextScroleNum) {
                    this.props.history.push('/accountManage/' + nextScroleNum);    // 0
                    continue;
                }
            }
        }
weixin_39354423 2019-07-26
  • 打赏
  • 举报
回复
for(var i =0;i<scrollArr.length;i++){ var menu = scrollArr[i].split(':')[0]; var nextScroleNum =parseInt(scrollArr[i].split(':')[1]); if(scrollValue<nextScroleNum){ if(this.props.match.params.anchor != menu ){ this.props.history.push('/accountManage/' +menu); break; } } } 用for来搞似乎也不对。小弟初学比较菜,就大神指点一下

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧