鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ 如何將下面的代碼優(yōu)化一下

如何將下面的代碼優(yōu)化一下

代碼中重復(fù)的遍歷有點(diǎn)多
如何減少重復(fù),其中每個(gè)._find是返回了data對(duì)象中elementCode為固定值的數(shù)組

var moduleModel = new Bb.Model({});
                    var data1 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'usagetype'
                    });
                    var data2 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'policystatus'
                    });
                    var data3 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'riskname'
                    });
                    var data4 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'businessnature'
                    });
                    var data5 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'chnltype'
                    });
                    var data6 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'paymethod'
                    });
                    var data7 = _.find(m.get('data'), function(d) {
                        return d.elementCode == 'traveltaxmark'
                    });
                    if (data1.dataList && data2.dataList && data3.dataList && data4.dataList && data5.dataList && data6.dataList && data7.dataList) {
                        moduleModel.set('usagetype', data1.dataList);
                        moduleModel.set('policystatus', data2.dataList);
                        moduleModel.set('riskname', data3.dataList);
                        moduleModel.set('businessnature', data4.dataList);
                        moduleModel.set('chnltype', data5.dataList);
                        moduleModel.set('paymethod', data6.dataList);
                        moduleModel.set('traveltaxmark', data7.dataList);

                        that.showChildView('policystatus', new policystatusView({
                            model: moduleModel,
                            el: that.getUI('policystatus')
                        }));
                        that.getChildView('policystatus').render();

                        that.showChildView('businessnature', new businessnatureView({
                            model: moduleModel,
                            el: that.getUI('businessnature')
                        }));
                        that.getChildView('businessnature').render();

                        that.showChildView('chnltype', new chnltypeView({
                            model: moduleModel,
                            el: that.getUI('chnltype')
                        }));
                        that.getChildView('chnltype').render();

                        that.showChildView('traveltaxmark', new traveltaxmarkView({
                            model: moduleModel,
                            el: that.getUI('traveltaxmark')
                        }));
                        that.getChildView('traveltaxmark').render();

                        that.showChildView('paymethod', new paymethodView({
                            model: moduleModel,
                            el: that.getUI('paymethod')
                        }));
                        that.getChildView('paymethod').render();

                        that.showChildView('usagetype', new usagetypeView({
                            model: moduleModel,
                            el: that.getUI('usagetype')
                        }));
                        that.getChildView('usagetype').render();

                        that.showChildView('riskname', new risknameView({
                            model: moduleModel,
                            el: that.getUI('riskname')
                        }));
                        that.getChildView('riskname').render();
                    } else {
                        layer.alert('查詢失??!');
                        return false;
                    }

                },
                error: function(e) {
                    layer.close(idx);
                    if (e.responseText === 'logout') {
                        window.location.href = '/login.html';
                    }
                    layer.alert('請(qǐng)求失敗!');
                }
   
回答
編輯回答
爆扎
var data = {
    "usagetype": null,
    "policystatus": null,
    "riskname": null,
    "businessnature": null,
    "chnltype": null,
    "paymethod": null,
    "traveltaxmark": null
}

var mData = m.get('data')

var viewFactory = (type, param) => {
    switch (type) {
        case 'usagetype':
            return new usagetypeView(param)
    }
}

Object.keys(data).map(key => {
    var dataList = (data[key] = _.find(mData, d => d.elementCode == key))['dataList']
    dataList &&
    moduleModel.set(key, dataList)

    that.showChildView(key, viewFactory(key, {
        model: moduleModel,
        el: that.getUI(key)
    }))

    that.getChildView(key).render();
})

工廠方法我沒(méi)寫全,也沒(méi)跑過(guò),大概意思吧,也不知道適不適合你的代碼環(huán)境

2017年12月8日 05:39