Как получить значение из объекта со значением по умолчанию - PullRequest
51 голосов
/ 25 января 2012

Я постоянно обнаруживаю, что передаю значения конфигурации функциям, получающим к ним доступ следующим образом:

var arg1 = 'test1';
if(isUndefined(config.args.arg1)){
  arg1 = config.args.arg1;
} 

var arg2 = 'param2';
if(isUndefined(config.args.arg2)){
  arg2 = config.args.arg2;
} 

var arg3 = '123';
if(isUndefined(config.args.arg3)){
  arg3 = config.args.arg3;
} 

где я позже использую их так:

var url = '<some-url>?id='+arg1+'&='+arg2 +'=' + arg3;

Предоставляет ли jQuery / ExtJS или любая другая инфраструктура решение для простого доступа к таким переменным и присваивает переменным значение по умолчанию?

Что-то вроде:

getValueOfObject(config,'args.arg3','<default>');

Или, может быть, есть стандартное решение для этого.

Примечание:

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

var defaults = {
   args: {
      args1: ....
   }
   ...
}

и выполняем слияние объектов.

А затем кодирование объекта в параметре String. Но, как вы можете видеть, объект значения также иногда содержат имена параметров.

Ответы [ 3 ]

59 голосов
/ 25 января 2012

Как правило, можно использовать или оператор , чтобы назначить значение по умолчанию, когда некоторая переменная оценивается как ложное:

var foo = couldBeUndefined || "some default";

, поэтому:

var arg1 = config.args.arg1 || "test";
var arg2 = config.args.arg2 || "param2";

при условии, чтоconfig.args всегда определяется, как предполагает ваш пример кода.

15 голосов
/ 21 июня 2016

Похоже, наконец lodash имеет функцию _. Get () для этого!

3 голосов
/ 25 января 2012

try var options = extend(defaults, userOptions);

Таким образом, вы получаете все userOptions и возвращаетесь к настройкам по умолчанию, когда они не передают никаких параметров.

Примечание используйте любые extend реализация, которую вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...