我碰到了this question(如何初始化[{id: 1},{id: 2},...]
之类的数组)。
可接受的答案是:
let sampleData = Array.from({length: 10}, (_, i) => ({id:i}))
console.log(sampleData)
还有很多其他的
但是,我认为template literals是一种解决方案,但我不知道如何使它工作。
到目前为止,我有:
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);
但是我还没有以某种方式调用此字符串的反勾号(类似TemplateLiteralFunction.call
上的arr
)来解析这些表达式。
而且,除了编写标记函数外,我还只是编写一个名为initArray(ofLength)
的函数。
因此,无论如何,您是否可以使用不带eval
或标记函数的模板文字来实现给定长度的数组填充值?也许以某种方式嵌套模板文字?
答案 0 :(得分:3)
您可以使用Function constructor
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));