繁体   English   中英

模板文字初始化给定长度的数组

[英]Template literals to initialize an array of given length

我遇到了这个问题 (如何初始化像[{id: 1},{id: 2},...]这样的数组。

接受的答案是:

 let sampleData = Array.from({length: 10}, (_, i) => ({id:i})) console.log(sampleData) 

还有很多其他的。
但是,我认为模板文字是一种解决方案,但我无法弄清楚如何使其工作。

到目前为止我所拥有的是:

 var i = 0; var arr = `[${"{id:++i},".repeat(10)}]` console.log("As a string",arr); console.log("Evaluated",eval(arr)); 

但是,它使用eval ,我知道这是错误的。

我也试过了

 var i = 0; var arr = `[${"{id:${++i}},".repeat(10)}]` console.log(arr); 

但我还没有以某种方式调用此字符串的后面的滴答(类似于arr TemplateLiteralFunction.call )来解析这些表达式。
而不是写一个标记函数,我只是编写一个名为initArray(ofLength)的函数。

那么,有没有你可以使用模板文字而没有eval或tag函数,并实现一个给定长度的数组填充值? 也许以某种方式嵌套模板文字?

您可以使用Function构造函数

Function构造函数创建一个新的Function对象。 直接调用构造函数可以动态创建函数,但是会遇到类似于eval的安全性和类似(但不太重要)的性能问题。 但是,与eval不同,Function构造函数允许在全局范围内执行代码,从而提示更好的编程习惯并允许更有效的代码缩小。

 var template = `[${"{\\"id\\":${++i}},".repeat(10)}]` template = template.replace(/,]$/,']'); //replace last comma var parser = new Function("{i}", "return `" + template + "`;"); var arr = parser({i:0}); console.log(JSON.parse(arr)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM