首页 文章

缩短长串

提问于
浏览
1

这行代码长度超过80个字符 - 有什么办法可以缩短它吗?

const playerVars = Object.assign({}, oldSettings.playerVars, newSettings.playerVars);

Here是JSFiddle上的整个项目 .

这是包含该行的函数:

function combineSettings(oldSettings, newSettings) {
    const playerVars = Object.assign({}, oldSettings.playerVars, newSettings.playerVars);
    const settings = Object.assign({}, oldSettings, newSettings);
    settings.playerVars = playerVars;
    return settings;
}

5 回答

  • 2

    只需将参数名称更改为更短:

    function combineSettings(oldS, newS) {
        const playerVars = Object.assign({}, oldS.playerVars, newS.playerVars);
        const settings = Object.assign({}, oldS, newS);
        settings.playerVars = playerVars;
        return settings;
    }
    
  • 0

    为什么不创建一些变量?像这样

    function combineSettings(oldSettings, newSettings) {
        const oldSet1 = oldSettings.playerVars;
        const newSet1 = newSettings.playerVars;
    
        const playerVars = Object.assign({}, oldSet1, newSet1);
        const settings = Object.assign({}, oldSettings, newSettings);
        settings.playerVars = playerVars;
        return settings;
    

    }

  • 1

    我喜欢编写代码,好像我用函数式编程语言编写 .

    所以我对你的问题的解决方案是:

    function combineSettings(oldSettings, newSettings) {
      return Object.assign(
        {}, 
        oldSettings, 
        newSettings,
        {
          playerVars: 
            Object.assign(
              {}, 
              oldSettings.playerVars, 
              newSettings.playerVars
            )
        }
      );
    }
    
    const settings1 = {
      someSet1: 'a',
      playerVars: {
        notifications: true,
        someVar: 1
      }
    };
    
    const settings2 = {
      someSet1: 'aa',
      someSet2: 'b',
      playerVars: {
        notifications: false, 
        mail: "somebody@gmail.com"
      }
    };
    
    
    console.log(combineSettings(settings1, settings2));
    

    如果你想缩小单行,你要将变量移动到数组,然后用扩展运算符调用 Object.assign

    function combineSettings(oldSettings, newSettings) {
      var playerVars = [
        oldSettings.playerVars, 
        newSettings.playerVars
      ];
      playerVars = Object.assign({}, ...playerVars); // Your one-liner
      // other operations
      return {playerVars};
    }
    
    const settings1 = {
      playerVars: {
        notifications: true,
        someVar: 1
      }
    };
    
    const settings2 = {
      playerVars: {
        notifications: false, 
        mail: "somebody@gmail.com"
      }
    };
    
    
    console.log(combineSettings(settings1, settings2));
    

    要么

    将其拆分为行:

    function combineSettings(oldSettings, newSettings) {
      var playerVars = 
        Object.assign(
          {}, 
          oldSettings.playerVars, 
          newSettings.playerVars
        );
      // other operations
      return {playerVars};
    }
    
    const settings1 = {
      playerVars: {
        notifications: true,
        someVar: 1
      }
    };
    
    const settings2 = {
      playerVars: {
        notifications: false, 
        mail: "somebody@gmail.com"
      }
    };
    
    
    console.log(combineSettings(settings1, settings2));
    

    Warning: 通过将参数名称更改为更短,我们将丢失其自我文档 . oldSettingsnewSettings 是自我解释的 .

    因此,只有通过将长行拆分为多行才能使代码可读和扩展的美妙方式 .

    我通过查询来搜索它: js style guide 并找到了这些好资源:

    https://standardjs.com/

    https://google.github.io/styleguide/jsguide.html

    https://github.com/felixge/node-style-guide

    Extra: 大多数IDE都有美化方法,可以为你做

  • -1

    虽然这不是StackOverflow的用途,但您可以重构一下:

    function combine( ...args ) {
        return Object.assign( {}, ...args );
    }
    
    function combineSettings( oldSettings, newSettings ) {
        return combine( oldSettings, newSettings, {
            playerVars : combine( oldSettings.playerVars, newSettings.playerVars )
        } );
    }
    
    console.log( combineSettings(
        { a : "foo", playerVars : { b : "bar" } },
        { b : "bar", playerVars : { a : "foo" } }
    ) ); // { a: 'foo', playerVars: { b: 'bar', a: 'foo' }, b: 'bar' }
    
  • 0

    您还可以为整个 Object.assign({}, ...args) 创建 "alias" 函数,并将参数移动到单独的行,如下所示:

    const merge = (...args) => Object.assign({}, ...args)
    
    function combineSettings(oldSettings, newSettings) {
      const playerVars = merge(
         oldSettings.playerVars, 
         newSettings.playerVars
      );
      const settings = merge(oldSettings, newSettings);
      settings.playerVars = playerVars;
      return settings;
    }
    

    这更简单/更简单,并且还添加 merge 作为您可以在以后使用的其他功能等 .

    仅供参考,如果您使用 lodash merge function already exists以及_.defaults_.extend/assignIn . Note :显然不建议你只使用lodash :)

相关问题