簡體   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