<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: создание строки по шаблону из массива значений / объекта]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=15310</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15310&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: создание строки по шаблону из массива значений / объекта».]]></description>
		<lastBuildDate>Sun, 19 Apr 2020 08:59:48 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[JS: создание строки по шаблону из массива значений / объекта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=139071#p139071</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (sand123)]]></author>
			<pubDate>Sun, 19 Apr 2020 08:59:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=139071#p139071</guid>
		</item>
	</channel>
</rss>
