4 ms·
It creates a function returning a function, where the argument to the first (which is a template) is used as a closure in the second (which takes a dict of valu
by arexxbifs 7y ago
It creates a function returning a function, where the argument to the first (which is a template) is used as a closure in the second (which takes a dict of values).
The last function called in turn creates a function using the Function constructor, which, since it takes a string argument as the function body, allows the expansion of the values dict into variables and thus the population of the template string:
applyTemplate("aaa ${v}")({"v":"yo"}) --> "aaa yo"
- baxuz 7y agoHow come you haven't used tagged template literals? These would fit this use case: https://codeburst.io/javascript-es6-tagged-template-literals-a45c26e54761 https://codeburst.io/javascript-es6-tagged-template-literals...
- arexxbifs 7y agoIt's not my code :) However, tagged template literals won't allow dict expansion the way this solution does. Also, a template literal is evaluated at the time of assignment. This will allow you to re-use an arbitrary template string with any matching values: tpl = applyTemplate("Hello ${a}"); tpl({"a": "you"}); // --> Hello you tpl({"a": "dude"}); // --> Hello dude
- errantspark 7y agoYou did a better job of explaining my code than I would have done! Thank you.
- arexxbifs 7y agoThanks! My pleasure :-)