<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS: создание строки по шаблону из массива значений / объекта]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15310&amp;type=atom" />
	<updated>2020-04-19T08:59:48Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15310</id>
		<entry>
			<title type="html"><![CDATA[JS: создание строки по шаблону из массива значений / объекта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=139071#p139071" />
			<content type="html"><![CDATA[<p>Простой способ выводить данные в консоль или заполнять шаблоны без конкатенации.<br />В самом начале скрипта (или в своей билиотеке) добавить метод в прототип</p><div class="codebox"><pre><code>
if(!String.prototype.template){
    String.prototype.template = function(jsonOrArr) {
        var json = jsonOrArr ? jsonOrArr : {},      
            all = Array.prototype.slice.call(arguments);
        if(all.length &gt; 1){
            json = all;
        } else {
            if(Object.prototype.toString.call(json) !== &#039;[object Array]&#039; &amp;&amp; Object.prototype.toString.call(json) !== &#039;[object Object]&#039;){
                json = [jsonOrArr];
            };
        };

        if(!this.indexOf(&quot;${&quot;)) {
            return this;
        };
        return this.replace(/\$\{\s*([$#@\-\d\w]+)\s*\}/gim, function (fullMath, grp) {
            var val = json[grp];
            if (typeof val === &quot;function&quot;) {
                val = val();
            } else if (val === null || val === undefined) {
                val = &quot;&quot;;
            } else if (typeof val === &quot;object&quot;) {
                val = val.toString();
            } else {
                val = val.valueOf();
            }
            return val;
        });
    };
};
</code></pre></div><p>После чего строки можно заполнять по шаблону (очень удобно для вывода в консоль, например)<br /></p><div class="codebox"><pre><code>
var name=&quot;paramName&quot;;
var val = &quot;paramVal&quot;;
var obj = {n: name, v:val};

/* по порядковому индексу */
WScript.Echo(&quot;проверка параметра ${0} на соответствие ${1}&quot;.template(name, val));

/* по имени свойства */
WScript.Echo(&quot;проверка параметра ${n} на соответствие ${v}&quot;.template(obj));
</code></pre></div><p>В обоих случаях в консоль выведется<br /></p><div class="codebox"><pre><code>
проверка параметра paramName на соответствие paramVal
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[sand123]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40759</uri>
			</author>
			<updated>2020-04-19T08:59:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=139071#p139071</id>
		</entry>
</feed>
