搜尋

首頁  >  問答  >  主體

node.js - 一段js代码的简写问题


    options.filename = dbPath+'picker';
    pickerDB = new Datastore(options);
    options.filename = dbPath+'data';
    dataDB = new Datastore(options);
    options.filename = dbPath+'web';
    webDB = new Datastore(options);
    options.filename = dbPath+'url';
    urlDB = new Datastore(options);
    options.filename = dbPath+'attach';
    attachDB = new Datastore(options);
    options.filename = dbPath+'cacheUrl';
    cacheUrlDB = new Datastore(options);
    options.filename = dbPath+'cache';
    cacheDB = new Datastore(options);
    options.filename = dbPath+'cron';
    cronDB = new Datastore(options);
    options.filename = dbPath+'log';
    logDB = new Datastore(options);
    options.filename = dbPath+'cronLog';
    cronLogDB = new Datastore(options);

请教一下,这一大段,都是复制粘贴。能用更简洁的代码一次搞定吗?

PHP中文网PHP中文网2786 天前581

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:59:06

    不知道算不算你心中的簡寫,我覺得從重複的角度看,把不同的部分提取出來做個數組,把相同的部分抽象,如下:

    let options = {},
        dbPath = ''; //TBD by yourself
    
    let stores = [
        'picker',
        'data',
        'web',
        'url',
        'attach',
        'cacheUrl',
        'cache',
        'cron',
        'log',
        'cronLog']
        .map(key => (options.filename = dbPath + key, new Datastore(options)));
    
    
    console.log(stores); //stores you want

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 14:59:06

        /*
            options == ?
            dbPath == ?
        */
        var _Datastore = {};
        _Datastore._opts = options;
        _Datastore._path = dbPath;
        _Datastore.Create = function(pathAddon){
            this._opts.filename = this._path + pathAddon;
            return new Datastore(this.options);
        };
        
        pickerDB = _Datastore.Create('picker');
        dataDB = _Datastore.Create('data');
        webDB = _Datastore.Create('web');
        urlDB = _Datastore.Create('url');
        attachDB = _Datastore.Create('attach');
        cacheUrlDB = _Datastore.Create('cacheUrl');
        cacheDB = _Datastore.Create('cache');
        cronDB = _Datastore.Create('cron');
        logDB = _Datastore.Create('log');
        cronLogDB = _Datastore.Create('cronLog');
    

    不知道你接下來的程式碼怎麼用?如果後邊的邏輯程式碼好改,可以改成:

        var _Datastore = {};
        _Datastore._opts = options;
        _Datastore._path = dbPath;
        _Datastore._cache = {};
        _Datastore.Create = function(pathAddon){
            this._opts.filename = this._path + pathAddon;
            return new Datastore(this.options);
        };
        _Datastore.DB = function(pathAddon){
            this._cache[pathAddon] = this._cache[pathAddon] || this.Create(pathAddon);
            return this._cache[pathAddon];
        };
    
        
        //调用 cronLogDB 时 改成 
        _Datastore.DB('cronLog');
        
        //第一次 会创建,第二次直接用之前创建的实例

    回覆
    0
  • 取消回覆