Уничтожение необязательных параметров функции - PullRequest
0 голосов
/ 18 сентября 2018

Царапая мою голову, пытаясь получить это оптимально.Скажем, у меня есть функция, которая принимает объект в качестве параметра и уничтожает его следующим образом:

myfunc = (options = {a:true, b:true, c:true}) => {...}

По умолчанию ab и c имеют значение true.Но, скажем, я звоню myfunc и хочу, чтобы b было ложным:

myfunc({b:false})

хорошо, теперь options.b === false, но значения для a и c пропали.Могу ли я выполнить это, не передавая копию значений по умолчанию?

Я пробовал что-то странное, например

myfunc = (options = Object.assign({a:true, b:true, c:true}, options)) =>{}

, но это, безусловно, неправильно.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете передать значения по умолчанию в операторе деструктурирования:

myFunc = ({a=true, b=true, c=true})

Недостатком, очевидно, является невозможность обращения к опциям в целом.Так что, возможно, options в качестве параметра и деструктурирование в теле функции - лучший вариант:

myfunc = (options={}) => {
    const {a=true, b=true, c=true} = options;
    ....
}
0 голосов
/ 18 сентября 2018

Вы можете использовать объект по умолчанию с деструктуризацией для требуемых свойств со значением по умолчанию, не используя option.Затем создайте новый, используя свойства сокращения.

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

var myfunc = ({ a = true, b = true, c = true, ...rest } = {}) => {
        const option = { a, b, c, ...rest };
        console.log(option);
    };

myfunc();             // take {} as default and the default values inside of the object
myfunc({ b: false }); // take b and default values
myfunc({ foo: 42 });  // take foo and all default values
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...