Установите логическое значение по умолчанию, если объект параметров не существует - PullRequest
0 голосов
/ 06 июня 2018

Я хочу установить логическое значение, которое я либо получаю из свойства в объекте параметров, либо, если оно не определено, нужно установить значение по умолчанию.

const raw = options.rawOutput;

Если не задан options.rawOutputзначение по умолчанию должно быть истинным.Проблема в том, что объект параметров может вообще не существовать.

Я ищу более элегантные решения, чем что-то вроде этого

if (options) {
  if (options.rawOutput) {
    raw = rawOutput;
  }
} else {
   raw = true;
}

Ответы [ 6 ]

0 голосов
/ 06 июня 2018

Когда мы говорим о options, в настоящее время подход имеет всегда определенный объект, по крайней мере по умолчанию.Так, например, в вашем случае у вас будет:

// list of all defaults value for options
const defaultOptions = {
  rawOutput: true
}


// assuming you are in a function when you get the options
function doSomething(userOptions) {
  // here you will have all the options, with `userOptions`
  // overrides the default options if they're defined.
  const options = {...defaultOptions, ...userOptions};

  if (options.rawOutput) {
    // do stuff
  }
}

Это полезно, особенно когда у вас есть несколько вариантов для передачи, и вы можете иметь значения по умолчанию для большинства из них.Таким образом, вам не нужно каждый раз проверять, существует ли какой-либо объект или свойства, и у вас также есть четкий список параметров по умолчанию, которые вы можете изменить - или получить из JSON - без влияния на ваш код.

0 голосов
/ 06 июня 2018

Вы можете сделать это, используя только логические операторы,

const raw = options && options.rawOutput || true;

Это установит для raw значение true в случае, если любой из параметров или options.rawOutput является ложным.

0 голосов
/ 06 июня 2018

Попробуйте это в случае, если вы хотите присвоить false, если параметры существуют, но rawOutput нет.

const raw = options ? (options.rawOutput ? rawOutput : false) : true;
0 голосов
/ 06 июня 2018

Использование мощности ES6:

const { rawOptions: raw = true } = options || {};

с использованием десерструктуризации объекта для получения rawOptions и присвоения его необработанной переменной со значением по умолчанию true

0 голосов
/ 06 июня 2018

Я хотел бы использовать проверку typeof:

const raw = ((typeof options == 'undefined') || (typeof options.rawOutput == 'undefined'))? true:options.rawOutput;
0 голосов
/ 06 июня 2018

Вы можете проверить, существует ли options и существует ли свойство rawOutput, затем принять это значение, в противном случае примите true.

raw = options && 'rawOutput' in options ? options.rawOutput : true;

или то же самое, но без условного выражения (троичный) оператор ?:.

raw = !options || !('rawOutput' in options) || options.rawOutput;
...