您好,欢迎访问一九零五行业门户网

JavaScript实现模板生成大量数据的方法(附代码)

本篇文章给大家带来的内容是关于javascript实现模板生成大量数据的方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
有时需要根据模板生成大量数据,这个代码工具简直就是神器。
基本思路就是:
解析模板数据,将替换的内容解析出来
解析输入数据,使用\t,\n将原始数据进行切分
进行数据替换,然后输出。
此处用jquery实现元素的选择,使用vue.js实现逻辑与展示的分离。
示例结果如下:
代码如下:
<!doctype html><html><head>    <meta charset="utf-8">    <title>模板生成器</title>    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>    <script src="https://cdn.bootcss.com/vue/2.5.22/vue.min.js"></script>    <!-- 最新版本的 bootstrap 核心 css 文件 -->    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-bvyiisifek1dgmjrakycuhahrg32omucww7on3rydg4va+pmstsz/k68vbdejh4u" crossorigin="anonymous">    <!-- 最新的 bootstrap 核心 javascript 文件 -->    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-tc5iqib027qvyjsmfhjomalkfuwvxzxupncja7l2mcwnipg9mgcd8wgnicpd7txa" crossorigin="anonymous"></script>    <script>        $(document).ready(function () {            function combinetemplateandinput(template, input) {                if (!template || !input) {                    return ;                }                var inputlines = input.split('\n');                var inputcount = 0;                // 统计数据的数量个数                for (var i = 0; i < inputlines.length; i++) { var line = inputlines[i]; if (line) { inputcount++; } } // 替换数据 var reslines = []; var inputindex = 1; for (var i = 0; i < inputlines.length; i++) { var line = inputlines[i]; // 忽略了空行 if (!line) { reslines.push(""); continue; } // 将数据按\t分隔生成$1=xx,$2=xx,$3=xx var dcolumns = line.split('\t'); var mcolumndata = {}; for (var j = 0; j < dcolumns.length; j++) { mcolumndata['$' + (1 + j)] = dcolumns[j]; } var resline = template; // 先进行$?,$#这些替换,避免数据中的相同格式干扰 // 替换$?,下标 resline = resline.replace(/(\$\?)/g, inputindex); // 替换$#,数据数量 resline = resline.replace(/(\$#)/g, inputcount); // 替换$0,整行数据 resline = resline.replace(/(\$0)/g, line); // 找出模板中的`$数字`格式的内容,并进行替换 resline = resline.replace(/(\$\d+)/g, function (match, p1) { if (mcolumndata[p1]) { return mcolumndata[p1]; } return ""; }); // 找出模板中`${数字}`格式的内容,进行替换 resline = resline.replace(/(\$\{\d+\})/g, function (match, p1) { if (mcolumndata[p1]) { return mcolumndata[p1]; } return ""; }); inputindex++; reslines.push(resline); } return reslines.join(""); } var vm = new vue({ el: "#container", data: { inputtemplate: [ "mkdir -p $4", "touch $4$2.proto", "\n" ].join("\n"), inputcontent: [ "/abc/getnearbyorgs/1.0 getnearbyorgs getnearbyorgs.proto abc/ getnearbyorgs /abc/getnearbyorgs/1.0", "/abc/getorgbyarea/1.0 getorgbyarea getorgbyarea.proto abc/ getorgbyarea /abc/getorgbyarea/1.0", "/abc/addfeedback/1.0 addfeedback addfeedback.proto abc/ addfeedback /abc/addfeedback/1.0", "/abc/getorgcities/1.0 getorgcities getorgcities.proto abc/ getorgcities /abc/getorgcities/1.0", "/abc/getserviceinfo/1.0 getserviceinfo getserviceinfo.proto abc/ getserviceinfo /abc/getserviceinfo/1.0", "/hello/saynearbyorgs/1.0 saynearbyorgs saynearbyorgs.proto hello/ saynearbyorgs /hello/saynearbyorgs/1.0", "/hello/sayorgbyarea/1.0 sayorgbyarea sayorgbyarea.proto hello/ sayorgbyarea /hello/sayorgbyarea/1.0", "/hello/sayorgcities/1.0 sayorgcities sayorgcities.proto hello/ sayorgcities /hello/sayorgcities/1.0", "/hello/sayserviceinfo/1.0 sayserviceinfo sayserviceinfo.proto hello/ sayserviceinfo /hello/sayserviceinfo/1.0" ].join("\n"), outputcontent: "", msg:{ title:"帮助", content:[ "$?: 数据的顺序,从1开始,不含空行", "$#: 数据的数量,不含空行", "$0: 原始数据,整行数据", "$数字: $1,$2,...,表示第1,2,...列数据", "${数字}: ${11},${12},...,表示第11,12,...列数据,用于去除$11与$1的混淆(暂未实现)" ].join("<br/>)                    }                },                methods: {                    aigen: function () {                        var self = this;                        self.outputcontent = combinetemplateandinput(self.inputtemplate, self.inputcontent);                    },                    clearinputcontent:function () {                        var self = this;                        self.inputcontent = ;                    },                    clearinputtemplate:function () {                        var self = this;                        self.inputtemplate = ;                    },                    clearoutputcontent:function () {                        var self = this;                        self.outputcontent = ;                    }                }            });        });    </script></head><body><div id="container" class="container ">    <div>        <div class="col-lg-12 col-sm-12 col-md-12 col-xs-12">            <h3>模板生成器</h3>        </div>                <div class="col-lg-12 col-sm-12 col-md-12 col-xs-12 bs-callout bs-callout-warning">            <div class="alert alert-warning" v-html="msg.content"></div>        </div>        <div class="col-lg-12 col-sm-12 col-md-12 col-xs-12">            <div>                <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12" id="inputtemplate">                    <div>                        <label class="col-sm-4 col-xs-4">模板</label>                    </div>                    <div>                        <textarea type="text" rows="10" name="inputtemplate" id="inputtemplatetext" v-model="inputtemplate" placeholder="请输入模板" ></textarea>                    </div>                </div>                <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12" id="inputcontent">                    <div>                        <label class="col-sm-4 col-xs-4">输入</label>                    </div>                    <div>                        <textarea type="text" rows="10" name="inputtemplate" v-model="inputcontent" placeholder="请输入数据" id="inputcontenttext" class="form-control col-md-12 text-to-copy-1"></textarea>                    </div>                </div>            </div>        </div>        <div class="col-lg-12 col-sm-12 col-md-12 col-xs-12 text-right" id="opbuttons">            <button class="btn btn-primary" @click="clearinputtemplate()">清空模板</button>            <button class="btn btn-primary" @click="clearinputcontent()">清空输入</button>            <button class="btn btn-primary" @click="clearoutputcontent()">清空输出</button>            <button class="btn btn-success" @click="aigen()">生成</button>        </div>        <div class="col-lg-12 col-sm-12 col-md-12 col-xs-12" id="outputcontent">            <div>                <label class="col-sm-2 col-xs-2">输出</label>            </div>            <div>                <textarea type="text" rows="20" name="outputcontent" id="outputtextcontent" v-model="outputcontent" placeholder="" readonly></textarea>            </div>        </div>    </div></div></body></html>
以上就是javascript实现模板生成大量数据的方法(附代码)的详细内容。
其它类似信息

推荐信息