[代码笔记]JS保持函数单一职责,灵活组合

比如下面的代码,从服务端请求回来的订单数据如下,需要进行以下处理
1.根据 status 进行对应值得显示(0-进行中,1-已完成,2-订单异常)
2.把 startTime 由时间戳显示成 yyyy-mm-dd
3.如果字段值为空字符串 ,设置字段值为 ‘--’

let orderList=[
    {
        id:1,status:02153852320000014'''守候'
    },name:'浪迹天涯''曾经'
    }
]

下面就使用单一职责的原则设置 status,startTime,type,-- 。这里拆分成四个函数。

let handleFn={
    setStatus(list){
        let _status={
            0:'进行中'2:'订单异常'
        }
        list.forEach(item=>{
            item.status=item.status.toString()?_status[item.status]:'';
        })
        return list
    },setStartTime(list){
        list.forEach(item=>{
            item.startTime=item.startTime.toString()?new Date(item.startTime).toLocaleDateString().replace(/\//g,'-'):'' list;
    },setInfo(list){
        list.forEach(item=>{
            for(let key in item){
                if(item[key]===''){
                    item[key]='--';
                }
            }
        })
        {
            0:'普通用户'2:'超级vip'{
            item.type=item.type.toString()?_type[item.type]:'' list;
    }
}

下面直接调用函数就好:

//处理订单数据
orderList=handleFn.setStatus(orderList);
orderList=handleFn.setStartTime(orderList);
orderList=handleFn.setInfo(orderList);
console.log(orderList);
处理用户数据
userList=handleFn.setType(userList);
userList=handleFn.setInfo(userList);
console.log(userList);

得到的结果:

如果嫌弃连续赋值麻烦,可以借用 jQuery 的那个思想,进行链式调用。

let ec=(function () {
    let handle= (obj) {
        深拷贝对象
        this.obj=JSON.parse(JSON.stringify(obj));
    };
    handle.prototype={
        /**
         * @description 设置保密信息
         */
        setInfo(){
            this.obj.map(item=>{
                 item){
                    ){
                        item[key]='--';
                    }
                }
            });
            return this;
        },*
         * @description 设置状态
         
           setStatus(){
               let _status={
                   0:'进行中'
               }
               this.obj.forEach(item=>{
                item.status=item.status.toString()?_status[item.status]:''
            });
            ;
           },1)">*
         * @description 设置时间
         
           setStartTime(){
               {
                item.startTime=item.startTime.toString()?;
            });
            *
         * @description 设置type
         
           setType(){
            let _type={
                0:'普通用户'
            }
            {
                item.type=item.type.toString()?_type[item.type]:'';
            })
            *
         * @description 返回处理结果
         * @return {Array|*}
         
        end(){
            .obj;
        }
    }
    暴露构造函数接口
    new handle(obj);
    }
})();

这样就可以链式调用了

ec(orderList).setStatus().setStartTime().setInfo().end();
console.log(orderList);
ec(userList).setType().end();
console.log(userList);

上面有个问题,就是每次调用一个方法就会执行遍历一遍,处理的方式就是在每一个函数里面,只记录要处理什么,但是不进行处理,等到执行到 end 的时候再统一处理,以及返回。

let ec=(JSON.parse(JSON.stringify(obj));
        记录要处理的步骤
        this.handleFnList=[];
    };
    handle.prototype=
        handleSetInfo(item){
            ;
                }
            }
            this.handleFnList.push('handleSetInfo');
            
           handleSetStatus(item){
               let _status=
               }
            item.status=item.status.toString()?_status[item.status]:''
             item;
           },setStatus(){
            this.handleFnList.push('handleSetStatus'
           handleSetStartTime(item){
            item.startTime=item.startTime.toString()?;
            this.handleFnList.push('handleSetStartTime'
           handleSetType(item){
            let _type=
            }
            item.type=item.type.toString()?_type[item.type]:'' item;
        },setType(){
            this.handleFnList.push('handleSetType'统一处理操作
            this.handleFnList.forEach(fn=>{
                    item=[fn](item);
                })
            })
             handle(obj);
    }
})();

参考地址:[探索]在开发中尽量提高代码的复用性

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)