Укорочение длинной нити - PullRequest
       4

Укорочение длинной нити

0 голосов
/ 08 декабря 2018

Эта строка кода длиннее 80 символов - есть ли способ сделать ее короче?

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

Здесь - это весь проект 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 ]

0 голосов
/ 09 декабря 2018

Почему бы просто не создать несколько переменных?Вот так

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;

}

0 голосов
/ 08 декабря 2018

Несмотря на то, что это не то, что 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 голосов
/ 08 декабря 2018

Мне нравится кодировать, как будто я пишу на функциональном языке программирования.

Поэтому мое решение для Вашего вопроса будет:

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));

Предупреждение: Изменяя имена параметров на более короткие, мы теряем их самодокументирование.oldSettings, newSettings говорят сами за себя.

Таким образом, это единственный прекрасный способ сделать код читаемым и расширяемым, разбивая длинную строку на несколько строк.

Я прогуглил его по запросу: js style guide и нашел следующие полезные ресурсы для чтения:

https://standardjs.com/

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

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

Дополнительно: У большинства IDE есть способ украсить, который сделает это за вас

0 голосов
/ 08 декабря 2018

Вы также можете сделать функцию "alias" для всего Object.assign({}, ...args) и переместить параметры в отдельные строки, например:

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 , функция слияния уже существует , а также _.defaults и _.extend/assignIn. Примечание : очевидно, не предлагает использовать lodash только для этого:)

0 голосов
/ 08 декабря 2018

Просто измените имена ваших параметров на более короткие:

function combineSettings(oldS, newS) {
    const playerVars = Object.assign({}, oldS.playerVars, newS.playerVars);
    const settings = Object.assign({}, oldS, newS);
    settings.playerVars = playerVars;
    return settings;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...